def createGrammar(): sommatoriaExpansion = Literal("sommatoria") sommatoriaExpansion.tag = '\\sum_{}^{}' sommatoriaRule = PublicRule("sommatoria_main", sommatoriaExpansion) indexExpansion = Literal("sommatoria da") indexExpansion.tag = None indexRule = PublicRule("summation_index", indexExpansion) intervalExpansion = Literal("sommatoria da a") intervalExpansion.tag = None intervalRule = PublicRule("summation_interval", intervalExpansion) #setattr section setattr(sommatoriaRule, 'node_type', NODE_TYPE.INTERNO) setattr(sommatoriaRule, 'request_new_layer', False) setattr(sommatoriaRule, 'next_rules_trigger_words', ['da']) setattr(sommatoriaRule, 'is_entry_rule', True) #------------------------- setattr(indexRule, 'node_type', NODE_TYPE.INTERNO) setattr(indexRule, 'request_new_layer', True) setattr(indexRule, 'next_rules_trigger_words', ['a']) setattr(indexRule, 'is_entry_rule', False) setattr( indexRule, 'go_to_begin', len('\\sum_{}^{}')) #attributo che specifica se fare carry-home. #------------------------------- setattr(intervalRule, 'node_type', NODE_TYPE.INTERNO) setattr(intervalRule, 'request_new_layer', True) setattr( intervalRule, 'next_rules_trigger_words', [] ) #non mettere None se no salta tutto perchè None non è iterabile setattr(intervalRule, 'is_entry_rule', False) #grammar creation section g = Grammar() g.add_rules(sommatoriaRule, indexRule, intervalRule) return g
def createGrammar(): short_rule = Literal( "per") #sto definendo un'expansion, non è una regola!! short_rule.tag = "\cdot" #il contributo di questa regola per il latex finale long_rule = Literal("moltiplicato per") #expansion long_rule.tag = "\cdot" multiplication_rule = PublicRule("multiplication", AlternativeSet(short_rule, long_rule)) #rule #setattr section (Per ogni rule 4 setattr) setattr( multiplication_rule, 'node_type', NODE_TYPE.FOGLIA ) #aggiungiamo un attributo type direttamente sull'oggetto PublicRule per connotarlo come nodo o attributo setattr( multiplication_rule, 'request_new_layer', False ) #tiene conto del fatto che il match di questa regola possa richiedere la creazione di un nuovo layer setattr( multiplication_rule, 'next_rules_trigger_words', [] ) #tiene conto del grafo della grammatica. Non mettere None se no salta tutto perchè None non è iterabile setattr( multiplication_rule, 'is_entry_rule', True) #tiene conto se questa regola è un entry point di un grafo setattr( multiplication_rule, 'leaf_end_cursor_movement', 1 ) #una foglia può specificare questo attributo per dire che dopo di lei il cursore deve muoversi di un tot (tipicamente per uno spazio) #grammar creation section g = Grammar() g.add_rule(multiplication_rule) return g
def createGrammar(): integraleDefinitoExpansion = Literal("integrale da") integraleDefinitoExpansion.tag = "\\int\\limits_{}^{}" definedIntegralRule = PublicRule("defined_integral_main", integraleDefinitoExpansion) integraleDefinitoUpLimitExpansion = Literal("integrale da a") integraleDefinitoUpLimitExpansion.tag = None upLimitRule = PublicRule("defined_integral_limit", integraleDefinitoUpLimitExpansion) #setattr section setattr(definedIntegralRule, 'node_type', NODE_TYPE.INTERNO) setattr(definedIntegralRule, 'request_new_layer', True) setattr(definedIntegralRule, 'next_rules_trigger_words', [ 'a' ]) #non mettere None se no salta tutto perchè None non è iterabile setattr(definedIntegralRule, 'is_entry_rule', True) setattr(definedIntegralRule, 'go_to_begin', len('\\int\\limits_{}^{}') ) #attributo che specifica se fare carry-home. #------------------------------ setattr(upLimitRule, 'node_type', NODE_TYPE.INTERNO) setattr(upLimitRule, 'request_new_layer', True) setattr( upLimitRule, 'next_rules_trigger_words', [] ) #non mettere None se no salta tutto perchè None non è iterabile setattr(upLimitRule, 'is_entry_rule', False) #grammar creation section g = Grammar() g.add_rules(definedIntegralRule, upLimitRule) return g
def createGrammar(): limiteMainExpansion = Literal("limite per") limiteMainExpansion.tag = "\\lim{ \\to }" limiteMainRule = PublicRule("limite_main", limiteMainExpansion) limiteUpP1Expansion = Literal("limite per che") limiteUpP1Expansion.tag = None limiteUpP1Rule = PublicRule("limite_up_p1", limiteUpP1Expansion) limiteUpP2Expansion = Literal("limite per che tende") limiteUpP2Expansion.tag = None limiteUpP2Rule = PublicRule("limite_up_p2", limiteUpP2Expansion) limiteUpP3Expansion = Literal("limite per che tende a") limiteUpP3Expansion.tag = None limiteUpP3Rule = PublicRule("limite_up_p3", limiteUpP3Expansion) #setattr section setattr(limiteMainRule, 'node_type', NODE_TYPE.INTERNO) setattr(limiteMainRule, 'request_new_layer', True) setattr(limiteMainRule, 'next_rules_trigger_words', [ 'che' ]) #non mettere None se no salta tutto perchè None non è iterabile setattr(limiteMainRule, 'is_entry_rule', True) setattr( limiteMainRule, 'go_to_begin', len('\\lim{ \\to }')) #attributo che specifica se fare carry-home. #------------------------------ setattr(limiteUpP1Rule, 'node_type', NODE_TYPE.INTERNO) setattr(limiteUpP1Rule, 'request_new_layer', True) setattr(limiteUpP1Rule, 'next_rules_trigger_words', [ 'tende' ]) #non mettere None se no salta tutto perchè None non è iterabile setattr(limiteUpP1Rule, 'is_entry_rule', False) #-------------------------------- setattr(limiteUpP2Rule, 'node_type', NODE_TYPE.INTERNO) setattr(limiteUpP2Rule, 'request_new_layer', True) setattr(limiteUpP2Rule, 'next_rules_trigger_words', [ 'a' ]) #non mettere None se no salta tutto perchè None non è iterabile setattr(limiteUpP2Rule, 'is_entry_rule', False) #------------------------------------ setattr(limiteUpP3Rule, 'node_type', NODE_TYPE.INTERNO) setattr(limiteUpP3Rule, 'request_new_layer', True) setattr( limiteUpP3Rule, 'next_rules_trigger_words', [] ) #non mettere None se no salta tutto perchè None non è iterabile setattr(limiteUpP3Rule, 'is_entry_rule', False) #grammar creation section g = Grammar() g.add_rules(limiteMainRule, limiteUpP1Rule, limiteUpP2Rule, limiteUpP3Rule) return g
def main(): # Define a open/close file rule. open, close = Literal("open"), Literal("close") open.tag, close.tag = "OPEN", "CLOSE" cmd = PublicRule("command", Sequence(AlternativeSet(open, close), "the file")) # Print the tags of the 'command' rule. print("Tags: %s\n" % cmd.tags) # Initialise a new grammar and add the rule to it. g = Grammar() g.add_rule(cmd) # Print the compiled grammar print("Compiled grammar is:\n%s" % g.compile()) # Find and print rules tagged with "OPEN" print("Tagged rules are:\n%s\n" % g.find_tagged_rules("OPEN")) # Matching tags can be retrieved using r.get_tags_matching # The Rule.matched_tags property can also be used if Rule.matches or # Grammar.find_matching_rules has been called first. speech = "open the file" print("Tags matching '%s' are: %s" % (speech, cmd.get_tags_matching(speech)))
def createGrammar(): rule = Literal("pedice") rule.tag = '_{}' alternative_rule = Literal("sub") alternative_rule.tag = '_{}' subscriptRule = PublicRule( "subscript", AlternativeSet(rule, alternative_rule) ) #volutamente non ha un tag. Non ha senso scrivere solo il '^' #setattr section setattr(subscriptRule, 'node_type', NODE_TYPE.INTERNO) setattr(subscriptRule, 'request_new_layer', True) setattr( subscriptRule, 'next_rules_trigger_words', [] ) #non mettere None se no salta tutto perchè None non è iterabile setattr(subscriptRule, 'is_entry_rule', True) #grammar creation section g = Grammar() g.add_rule(subscriptRule) return g
def createGrammar(): rule = Literal("pi greco") rule.tag = "\\pi" alternative_rule = Literal("pigreco") alternative_rule.tag = "\\pi" alternative_rule2 = Literal("p greco") alternative_rule2.tag = "\\pi" piGrecoRule = PublicRule( "pi-greco", AlternativeSet(rule, alternative_rule, alternative_rule2)) #setattr section setattr(piGrecoRule, 'node_type', NODE_TYPE.FOGLIA) setattr(piGrecoRule, 'request_new_layer', False) setattr( piGrecoRule, 'next_rules_trigger_words', [] ) #non mettere None se no salta tutto perchè None non è iterabile setattr(piGrecoRule, 'is_entry_rule', True) #grammar creation section g = Grammar() g.add_rule(piGrecoRule) return g
def createGrammar(): fracExpansion = Literal("frazione") fracExpansion.tag = '\\frac{}{}' fracRule = PublicRule("fraction_main", fracExpansion) numeratorExpansion = Literal("frazione numeratore") numeratorExpansion.tag = None numeratorRule = PublicRule("fraction_numerator", numeratorExpansion) denominatorExpansion = Literal("frazione numeratore denominatore") denominatorExpansion.tag = None denominatorRule = PublicRule("fraction_denominator", denominatorExpansion) #setattr section setattr(fracRule, 'node_type', NODE_TYPE.INTERNO) setattr(fracRule, 'request_new_layer', False) setattr(fracRule, 'next_rules_trigger_words', [ 'numeratore' ]) #non mettere None se no salta tutto perchè None non è iterabile setattr(fracRule, 'is_entry_rule', True) #------------------- setattr(numeratorRule, 'node_type', NODE_TYPE.INTERNO) setattr(numeratorRule, 'request_new_layer', True) setattr(numeratorRule, 'next_rules_trigger_words', [ 'denominatore' ]) #non mettere None se no salta tutto perchè None non è iterabile setattr(numeratorRule, 'is_entry_rule', False) setattr( numeratorRule, 'go_to_begin', len('\\frac{}{}')) #attributo che specifica se fare carry-home. #------------------------ setattr(denominatorRule, 'node_type', NODE_TYPE.INTERNO) setattr(denominatorRule, 'request_new_layer', True) setattr( denominatorRule, 'next_rules_trigger_words', [] ) #non mettere None se no salta tutto perchè None non è iterabile setattr(denominatorRule, 'is_entry_rule', False) #grammar creation section g = Grammar() g.add_rules(fracRule, numeratorRule, denominatorRule) return g
def createGrammar(): short_expansion = Literal("più meno") short_expansion.tag = "\pm" long_expansion = Literal("più o meno") long_expansion.tag = "\pm" piuMenoRule = PublicRule( "plus_minus", AlternativeSet(short_expansion, long_expansion)) #setattr section setattr(piuMenoRule, 'node_type', NODE_TYPE.FOGLIA) setattr(piuMenoRule, 'request_new_layer', False) setattr( piuMenoRule, 'next_rules_trigger_words', [] ) #non mettere None se no salta tutto perchè None non è iterabile setattr(piuMenoRule, 'is_entry_rule', True) setattr( piuMenoRule, 'leaf_end_cursor_movement', 1 ) #una foglia può specificare questo attributo per dire che dopo di lei il cursore deve muoversi di un tot (tipicamente per uno spazio) #grammar creation section g = Grammar() g.add_rule(piuMenoRule) return g
def createGrammar(): short_expansion = Literal("chiusa graffa") short_expansion.tag = "}" long_expansion = Literal("chiudi parentesi graffa") long_expansion.tag = "}" long_expansion_2 = Literal("chiusa parentesi graffa") long_expansion_2.tag = "}" openSquareRule = PublicRule( "close_brace", AlternativeSet(short_expansion, long_expansion, long_expansion_2)) #setattr section setattr(openSquareRule, 'node_type', NODE_TYPE.FOGLIA) setattr(openSquareRule, 'request_new_layer', False) setattr( openSquareRule, 'next_rules_trigger_words', [] ) #non mettere None se no salta tutto perchè None non è iterabile setattr(openSquareRule, 'is_entry_rule', True) #grammar creation section g = Grammar() g.add_rule(openSquareRule) return g
def createGrammar(): short_expansion = Literal("aperta tonda") short_expansion.tag = "(" long_expansion = Literal("apri parentesi tonda") long_expansion.tag = "(" long_expansion_2 = Literal("aperta parentesi tonda") long_expansion_2.tag = "(" openParentesisRule = PublicRule( "open_parenthesis", AlternativeSet(short_expansion, long_expansion, long_expansion_2)) #setattr section setattr(openParentesisRule, 'node_type', NODE_TYPE.FOGLIA) setattr(openParentesisRule, 'request_new_layer', False) setattr( openParentesisRule, 'next_rules_trigger_words', [] ) #non mettere None se no salta tutto perchè None non è iterabile setattr(openParentesisRule, 'is_entry_rule', True) #grammar creation section g = Grammar() g.add_rule(openParentesisRule) return g
def createGrammar(): rule = Literal("gamma") rule.tag = "\\gamma" gammaRule = PublicRule("gamma", rule) #setattr section setattr(gammaRule, 'node_type', NODE_TYPE.FOGLIA) setattr(gammaRule, 'request_new_layer', False) setattr( gammaRule, 'next_rules_trigger_words', [] ) #non mettere None se no salta tutto perchè None non è iterabile setattr(gammaRule, 'is_entry_rule', True) #grammar creation section g = Grammar() g.add_rule(gammaRule) return g
def createGrammar(): rule = Literal("valore assoluto di") rule.tag = '||' absoluteValueRule = PublicRule("absolute_value", rule) #setattr section setattr(absoluteValueRule, 'node_type', NODE_TYPE.INTERNO ) #vuol dire che si dovrà terminare con una foglia setattr(absoluteValueRule, 'request_new_layer', True) setattr( absoluteValueRule, 'next_rules_trigger_words', [] ) #non mettere None se no salta tutto perchè None non è iterabile setattr(absoluteValueRule, 'is_entry_rule', True) #grammar creation section g = Grammar() g.add_rule(absoluteValueRule) return g
def createGrammar(): rule = Literal("alla") rule.tag = '^{}' powerRule = PublicRule( "power", rule ) #volutamente non ha un tag. Non ha senso scrivere solo il '^' #setattr section setattr(powerRule, 'node_type', NODE_TYPE.INTERNO) setattr(powerRule, 'request_new_layer', True) setattr( powerRule, 'next_rules_trigger_words', [] ) #non mettere None se no salta tutto perchè None non è iterabile setattr(powerRule, 'is_entry_rule', True) #grammar creation section g = Grammar() g.add_rule(powerRule) return g
def createGrammar(): rule = Literal("diviso") rule.tag = "\div" divideRule = PublicRule("divide", rule) #setattr section setattr(divideRule, 'node_type', NODE_TYPE.FOGLIA) setattr(divideRule, 'request_new_layer', False) setattr( divideRule, 'next_rules_trigger_words', [] ) #non mettere None se no salta tutto perchè None non è iterabile setattr(divideRule, 'is_entry_rule', True) setattr( divideRule, 'leaf_end_cursor_movement', 1 ) #una foglia può specificare questo attributo per dire che dopo di lei il cursore deve muoversi di un tot (tipicamente per uno spazio) #grammar creation section g = Grammar() g.add_rule(divideRule) return g