summaryrefslogtreecommitdiff
path: root/src/examples/antlr_grammar_tests.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/examples/antlr_grammar_tests.py')
-rw-r--r--src/examples/antlr_grammar_tests.py85
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