diff options
Diffstat (limited to 'src/examples/antlr_grammar_tests.py')
-rw-r--r-- | src/examples/antlr_grammar_tests.py | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/src/examples/antlr_grammar_tests.py b/src/examples/antlr_grammar_tests.py new file mode 100644 index 0000000..31aab29 --- /dev/null +++ b/src/examples/antlr_grammar_tests.py @@ -0,0 +1,85 @@ +''' +Created on 4 sept. 2010 + +@author: luca +''' +import unittest +import antlr_grammar + +class Test(unittest.TestCase): + + + def testOptionsSpec(self): + text = """options { + language = Python; + }""" + antlr_grammar.optionsSpec.parseString(text) #@UndefinedVariable + + def testTokensSpec(self): + text = """tokens { + PLUS = '+' ; + MINUS = '-' ; + MULT = '*' ; + DIV = '/' ; + }""" + antlr_grammar.tokensSpec.parseString(text) #@UndefinedVariable + + def testBlock(self): + text = """( PLUS | MINUS )""" + antlr_grammar.block.parseString(text) #@UndefinedVariable + + def testRule(self): + text = """expr : term ( ( PLUS | MINUS ) term )* ;""" + antlr_grammar.rule.parseString(text) #@UndefinedVariable + + def testLexerRule(self): + text = """fragment DIGIT : '0'..'9' ;""" + antlr_grammar.rule.parseString(text) #@UndefinedVariable + + def testLexerRule2(self): + text = """WHITESPACE : ( '\t' | ' ' | '\r' | '\n'| '\u000C' )+ { $channel = HIDDEN; } ;""" + #antlr_grammar.rule.parseString(text) #@UndefinedVariable + + def testGrammar(self): + text = """grammar SimpleCalc; + +options { + language = Python; +} + +tokens { + PLUS = '+' ; + MINUS = '-' ; + MULT = '*' ; + DIV = '/' ; +} + +/*------------------------------------------------------------------ + * PARSER RULES + *------------------------------------------------------------------*/ + +expr : term ( ( PLUS | MINUS ) term )* ; + +term : factor ( ( MULT | DIV ) factor )* ; + +factor : NUMBER ; + + +/*------------------------------------------------------------------ + * LEXER RULES + *------------------------------------------------------------------*/ + +NUMBER : (DIGIT)+ ; + +/* WHITESPACE : ( '\t' | ' ' | '\r' | '\n'| '\u000C' )+ { $channel = HIDDEN; } ; */ + +fragment DIGIT : '0'..'9' ;""" + antlrGrammarTree = antlr_grammar.grammarDef.parseString(text) #@UndefinedVariable + pyparsingRules = antlr_grammar.antlrConverter(antlrGrammarTree) + pyparsingRule = pyparsingRules["expr"] + pyparsingTree = pyparsingRule.parseString("2 - 5 * 42 + 7 / 25") + self.assertNotEqual(None, pyparsingTree) + +if __name__ == "__main__": + #import sys;sys.argv = ['', 'Test.testOptionsSpec'] + unittest.main()
\ No newline at end of file |