TestLeftRecursion for Java is working
This commit is contained in:
parent
6890d0bfdd
commit
c9c32c2c4f
|
@ -1,5 +1,6 @@
|
|||
TestFolders ::= [
|
||||
"CompositeLexers": [],
|
||||
"LeftRecursion": [],
|
||||
"LexerErrors": [],
|
||||
"LexerExec": [],
|
||||
"Listeners": [],
|
||||
|
|
|
@ -1,3 +1,16 @@
|
|||
TestType() ::= "Parser"
|
||||
|
||||
Options ::= [
|
||||
"Debug": false
|
||||
]
|
||||
|
||||
Grammar ::= [
|
||||
"Expr": {<grammar("Expr")>}
|
||||
]
|
||||
|
||||
Rule() ::= "prog"
|
||||
|
||||
grammar(grammarName) ::= <<
|
||||
grammar <grammarName>;
|
||||
prog: stat ;
|
||||
stat: expr NEWLINE # printExpr
|
||||
|
@ -19,3 +32,4 @@ ID : [a-zA-Z]+ ; // match identifiers
|
|||
INT : [0-9]+ ; // match integers
|
||||
NEWLINE:'\r'? '\n' ; // return newlines to parser (is end-statement signal)
|
||||
WS : [ \t]+ -> skip ; // toss out whitespace
|
||||
>>
|
|
@ -0,0 +1,7 @@
|
|||
import "AmbigLR.stg"
|
||||
|
||||
Input() ::= "1<\n>"
|
||||
|
||||
Output() ::= ""
|
||||
|
||||
Errors() ::= ""
|
|
@ -0,0 +1,7 @@
|
|||
import "AmbigLR.stg"
|
||||
|
||||
Input() ::= "a = 5<\n>"
|
||||
|
||||
Output() ::= ""
|
||||
|
||||
Errors() ::= ""
|
|
@ -0,0 +1,7 @@
|
|||
import "AmbigLR.stg"
|
||||
|
||||
Input() ::= "b = 6<\n>"
|
||||
|
||||
Output() ::= ""
|
||||
|
||||
Errors() ::= ""
|
|
@ -0,0 +1,7 @@
|
|||
import "AmbigLR.stg"
|
||||
|
||||
Input() ::= "a+b*2<\n>"
|
||||
|
||||
Output() ::= ""
|
||||
|
||||
Errors() ::= ""
|
|
@ -0,0 +1,7 @@
|
|||
import "AmbigLR.stg"
|
||||
|
||||
Input() ::= "(1+2)*3<\n>"
|
||||
|
||||
Output() ::= ""
|
||||
|
||||
Errors() ::= ""
|
|
@ -1,3 +1,16 @@
|
|||
TestType() ::= "Parser"
|
||||
|
||||
Options ::= [
|
||||
"Debug": false
|
||||
]
|
||||
|
||||
Grammar ::= [
|
||||
"T": {<grammar("T")>}
|
||||
]
|
||||
|
||||
Rule() ::= "s"
|
||||
|
||||
grammar(grammarName) ::= <<
|
||||
grammar <grammarName>;
|
||||
s @after {<ToStringTree("$ctx"):writeln()>} : declarator EOF ; // must indicate EOF can follow
|
||||
declarator
|
||||
|
@ -12,3 +25,4 @@ e : INT ;
|
|||
ID : 'a'..'z'+ ;
|
||||
INT : '0'..'9'+ ;
|
||||
WS : (' '|'\n') -> skip ;
|
||||
>>
|
|
@ -0,0 +1,9 @@
|
|||
import "Declarations.stg"
|
||||
|
||||
Input() ::= "a"
|
||||
|
||||
Output() ::= <<
|
||||
(s (declarator a) \<EOF>)<\n>
|
||||
>>
|
||||
|
||||
Errors() ::= ""
|
|
@ -0,0 +1,9 @@
|
|||
import "Declarations.stg"
|
||||
|
||||
Input() ::= "(*a)[]"
|
||||
|
||||
Output() ::= <<
|
||||
(s (declarator (declarator ( (declarator * (declarator a)) )) [ ]) \<EOF>)<\n>
|
||||
>>
|
||||
|
||||
Errors() ::= ""
|
|
@ -0,0 +1,9 @@
|
|||
import "Declarations.stg"
|
||||
|
||||
Input() ::= "*a"
|
||||
|
||||
Output() ::= <<
|
||||
(s (declarator * (declarator a)) \<EOF>)<\n>
|
||||
>>
|
||||
|
||||
Errors() ::= ""
|
|
@ -0,0 +1,9 @@
|
|||
import "Declarations.stg"
|
||||
|
||||
Input() ::= "**a"
|
||||
|
||||
Output() ::= <<
|
||||
(s (declarator * (declarator * (declarator a))) \<EOF>)<\n>
|
||||
>>
|
||||
|
||||
Errors() ::= ""
|
|
@ -0,0 +1,9 @@
|
|||
import "Declarations.stg"
|
||||
|
||||
Input() ::= "a[3]"
|
||||
|
||||
Output() ::= <<
|
||||
(s (declarator (declarator a) [ (e 3) ]) \<EOF>)<\n>
|
||||
>>
|
||||
|
||||
Errors() ::= ""
|
|
@ -0,0 +1,9 @@
|
|||
import "Declarations.stg"
|
||||
|
||||
Input() ::= "b[]"
|
||||
|
||||
Output() ::= <<
|
||||
(s (declarator (declarator b) [ ]) \<EOF>)<\n>
|
||||
>>
|
||||
|
||||
Errors() ::= ""
|
|
@ -0,0 +1,9 @@
|
|||
import "Declarations.stg"
|
||||
|
||||
Input() ::= "(a)"
|
||||
|
||||
Output() ::= <<
|
||||
(s (declarator ( (declarator a) )) \<EOF>)<\n>
|
||||
>>
|
||||
|
||||
Errors() ::= ""
|
|
@ -0,0 +1,9 @@
|
|||
import "Declarations.stg"
|
||||
|
||||
Input() ::= "a[]()"
|
||||
|
||||
Output() ::= <<
|
||||
(s (declarator (declarator (declarator a) [ ]) ( )) \<EOF>)<\n>
|
||||
>>
|
||||
|
||||
Errors() ::= ""
|
|
@ -0,0 +1,9 @@
|
|||
import "Declarations.stg"
|
||||
|
||||
Input() ::= "a[][]"
|
||||
|
||||
Output() ::= <<
|
||||
(s (declarator (declarator (declarator a) [ ]) [ ]) \<EOF>)<\n>
|
||||
>>
|
||||
|
||||
Errors() ::= ""
|
|
@ -0,0 +1,9 @@
|
|||
import "Declarations.stg"
|
||||
|
||||
Input() ::= "*a[]"
|
||||
|
||||
Output() ::= <<
|
||||
(s (declarator * (declarator (declarator a) [ ])) \<EOF>)<\n>
|
||||
>>
|
||||
|
||||
Errors() ::= ""
|
|
@ -0,0 +1,20 @@
|
|||
TestType() ::= "Parser"
|
||||
|
||||
Options ::= [
|
||||
"Debug": false
|
||||
]
|
||||
|
||||
Grammar ::= [
|
||||
"T": {<grammar("T")>}
|
||||
]
|
||||
|
||||
Rule() ::= "a"
|
||||
|
||||
grammar(grammarName) ::= <<
|
||||
grammar <grammarName>;
|
||||
a @after {<ToStringTree("$ctx"):writeln()>} : a ID
|
||||
| ID
|
||||
;
|
||||
ID : 'a'..'z'+ ;
|
||||
WS : (' '|'\n') -> skip ;
|
||||
>>
|
|
@ -0,0 +1,9 @@
|
|||
import "DirectCallToLeftRecursiveRule.stg"
|
||||
|
||||
Input() ::= "x"
|
||||
|
||||
Output() ::= <<
|
||||
(a x)<\n>
|
||||
>>
|
||||
|
||||
Errors() ::= ""
|
|
@ -0,0 +1,9 @@
|
|||
import "DirectCallToLeftRecursiveRule.stg"
|
||||
|
||||
Input() ::= "x y"
|
||||
|
||||
Output() ::= <<
|
||||
(a (a x) y)<\n>
|
||||
>>
|
||||
|
||||
Errors() ::= ""
|
|
@ -0,0 +1,9 @@
|
|||
import "DirectCallToLeftRecursiveRule.stg"
|
||||
|
||||
Input() ::= "x y z"
|
||||
|
||||
Output() ::= <<
|
||||
(a (a (a x) y) z)<\n>
|
||||
>>
|
||||
|
||||
Errors() ::= ""
|
|
@ -1,3 +1,16 @@
|
|||
TestType() ::= "Parser"
|
||||
|
||||
Options ::= [
|
||||
"Debug": false
|
||||
]
|
||||
|
||||
Grammar ::= [
|
||||
"T": {<grammar("T")>}
|
||||
]
|
||||
|
||||
Rule() ::= "s"
|
||||
|
||||
grammar(grammarName) ::= <<
|
||||
grammar <grammarName>;
|
||||
s @after {<ToStringTree("$ctx"):writeln()>} : e EOF ; // must indicate EOF can follow
|
||||
e : e '.' ID
|
||||
|
@ -11,3 +24,4 @@ e : e '.' ID
|
|||
ID : 'a'..'z'+ ;
|
||||
INT : '0'..'9'+ ;
|
||||
WS : (' '|'\n') -> skip ;
|
||||
>>
|
|
@ -0,0 +1,9 @@
|
|||
import "Expressions.stg"
|
||||
|
||||
Input() ::= "a"
|
||||
|
||||
Output() ::= <<
|
||||
(s (e a) \<EOF>)<\n>
|
||||
>>
|
||||
|
||||
Errors() ::= ""
|
|
@ -0,0 +1,9 @@
|
|||
import "Expressions.stg"
|
||||
|
||||
Input() ::= "1"
|
||||
|
||||
Output() ::= <<
|
||||
(s (e 1) \<EOF>)<\n>
|
||||
>>
|
||||
|
||||
Errors() ::= ""
|
|
@ -0,0 +1,9 @@
|
|||
import "Expressions.stg"
|
||||
|
||||
Input() ::= "a-1"
|
||||
|
||||
Output() ::= <<
|
||||
(s (e (e a) - (e 1)) \<EOF>)<\n>
|
||||
>>
|
||||
|
||||
Errors() ::= ""
|
|
@ -0,0 +1,9 @@
|
|||
import "Expressions.stg"
|
||||
|
||||
Input() ::= "a.b"
|
||||
|
||||
Output() ::= <<
|
||||
(s (e (e a) . b) \<EOF>)<\n>
|
||||
>>
|
||||
|
||||
Errors() ::= ""
|
|
@ -0,0 +1,9 @@
|
|||
import "Expressions.stg"
|
||||
|
||||
Input() ::= "a.this"
|
||||
|
||||
Output() ::= <<
|
||||
(s (e (e a) . this) \<EOF>)<\n>
|
||||
>>
|
||||
|
||||
Errors() ::= ""
|
|
@ -0,0 +1,9 @@
|
|||
import "Expressions.stg"
|
||||
|
||||
Input() ::= "-a"
|
||||
|
||||
Output() ::= <<
|
||||
(s (e - (e a)) \<EOF>)<\n>
|
||||
>>
|
||||
|
||||
Errors() ::= ""
|
|
@ -0,0 +1,9 @@
|
|||
import "Expressions.stg"
|
||||
|
||||
Input() ::= "-a+b"
|
||||
|
||||
Output() ::= <<
|
||||
(s (e (e - (e a)) + (e b)) \<EOF>)<\n>
|
||||
>>
|
||||
|
||||
Errors() ::= ""
|
|
@ -0,0 +1,100 @@
|
|||
//TestFolders ::= [
|
||||
//]
|
||||
|
||||
TestTemplates ::= [
|
||||
"Simple_1": [],
|
||||
"Simple_2": [],
|
||||
"Simple_3": [],
|
||||
"DirectCallToLeftRecursiveRule_1": [],
|
||||
"DirectCallToLeftRecursiveRule_2": [],
|
||||
"DirectCallToLeftRecursiveRule_3": [],
|
||||
"SemPred": [],
|
||||
"TernaryExpr_1": [],
|
||||
"TernaryExpr_2": [],
|
||||
"TernaryExpr_3": [],
|
||||
"TernaryExpr_4": [],
|
||||
"TernaryExpr_5": [],
|
||||
"TernaryExpr_6": [],
|
||||
"TernaryExpr_7": [],
|
||||
"TernaryExpr_8": [],
|
||||
"TernaryExpr_9": [],
|
||||
"Expressions_1": [],
|
||||
"Expressions_2": [],
|
||||
"Expressions_3": [],
|
||||
"Expressions_4": [],
|
||||
"Expressions_5": [],
|
||||
"Expressions_6": [],
|
||||
"Expressions_7": [],
|
||||
"JavaExpressions_1": [],
|
||||
"JavaExpressions_2": [],
|
||||
"JavaExpressions_3": [],
|
||||
"JavaExpressions_4": [],
|
||||
"JavaExpressions_5": [],
|
||||
"JavaExpressions_6": [],
|
||||
"JavaExpressions_7": [],
|
||||
"JavaExpressions_8": [],
|
||||
"JavaExpressions_9": [],
|
||||
"JavaExpressions_10": [],
|
||||
"JavaExpressions_11": [],
|
||||
"JavaExpressions_12": [],
|
||||
"Declarations_1": [],
|
||||
"Declarations_2": [],
|
||||
"Declarations_3": [],
|
||||
"Declarations_4": [],
|
||||
"Declarations_5": [],
|
||||
"Declarations_6": [],
|
||||
"Declarations_7": [],
|
||||
"Declarations_8": [],
|
||||
"Declarations_9": [],
|
||||
"Declarations_10": [],
|
||||
"ReturnValueAndActions_1": [],
|
||||
"ReturnValueAndActions_2": [],
|
||||
"ReturnValueAndActions_3": [],
|
||||
"ReturnValueAndActions_4": [],
|
||||
"LabelsOnOpSubrule_1": [],
|
||||
"LabelsOnOpSubrule_2": [],
|
||||
"LabelsOnOpSubrule_3": [],
|
||||
"ReturnValueAndActionsAndLabels_1": [],
|
||||
"ReturnValueAndActionsAndLabels_2": [],
|
||||
"ReturnValueAndActionsAndLabels_3": [],
|
||||
"ReturnValueAndActionsAndLabels_4": [],
|
||||
"MultipleAlternativesWithCommonLabel_1": [],
|
||||
"MultipleAlternativesWithCommonLabel_2": [],
|
||||
"MultipleAlternativesWithCommonLabel_3": [],
|
||||
"MultipleAlternativesWithCommonLabel_4": [],
|
||||
"PrefixOpWithActionAndLabel_1": [],
|
||||
"PrefixOpWithActionAndLabel_2": [],
|
||||
"PrefixOpWithActionAndLabel_3": [],
|
||||
"AmbigLR_1": [],
|
||||
"AmbigLR_2": [],
|
||||
"AmbigLR_3": [],
|
||||
"AmbigLR_4": [],
|
||||
"AmbigLR_5": [],
|
||||
"WhitespaceInfluence_1": [],
|
||||
"WhitespaceInfluence_2": [],
|
||||
"PrecedenceFilterConsidersContext": [],
|
||||
"MultipleActions_1": [],
|
||||
"MultipleActions_2": [],
|
||||
"MultipleActions_3": [],
|
||||
"MultipleActionsPredicatesOptions_1": [],
|
||||
"MultipleActionsPredicatesOptions_2": [],
|
||||
"MultipleActionsPredicatesOptions_3": [],
|
||||
"SemPredFailOption": [],
|
||||
"TernaryExprExplicitAssociativity_1": [],
|
||||
"TernaryExprExplicitAssociativity_2": [],
|
||||
"TernaryExprExplicitAssociativity_3": [],
|
||||
"TernaryExprExplicitAssociativity_4": [],
|
||||
"TernaryExprExplicitAssociativity_5": [],
|
||||
"TernaryExprExplicitAssociativity_6": [],
|
||||
"TernaryExprExplicitAssociativity_7": [],
|
||||
"TernaryExprExplicitAssociativity_8": [],
|
||||
"TernaryExprExplicitAssociativity_9": [],
|
||||
"ReturnValueAndActionsList1_1": [],
|
||||
"ReturnValueAndActionsList1_2": [],
|
||||
"ReturnValueAndActionsList1_3": [],
|
||||
"ReturnValueAndActionsList1_4": [],
|
||||
"ReturnValueAndActionsList2_1": [],
|
||||
"ReturnValueAndActionsList2_2": [],
|
||||
"ReturnValueAndActionsList2_3": [],
|
||||
"ReturnValueAndActionsList2_4": []
|
||||
]
|
|
@ -1,3 +1,16 @@
|
|||
TestType() ::= "Parser"
|
||||
|
||||
Options ::= [
|
||||
"Debug": false
|
||||
]
|
||||
|
||||
Grammar ::= [
|
||||
"T": {<grammar("T")>}
|
||||
]
|
||||
|
||||
Rule() ::= "s"
|
||||
|
||||
grammar(grammarName) ::= <<
|
||||
grammar <grammarName>;
|
||||
s @after {<ToStringTree("$ctx"):writeln()>} : e EOF ; // must indicate EOF can follow
|
||||
expressionList
|
||||
|
@ -22,7 +35,7 @@ e : '(' e ')'
|
|||
| ('~'|'!') e
|
||||
| e ('*'|'/'|'%') e
|
||||
| e ('+'|'-') e
|
||||
| e ('\<\<' | '>>>' | '>>') e
|
||||
| e ('\<\<' | '>\>>' | '\>>') e
|
||||
| e ('\<=' | '>=' | '>' | '\<') e
|
||||
| e 'instanceof' e
|
||||
| e ('==' | '!=') e
|
||||
|
@ -41,8 +54,8 @@ e : '(' e ')'
|
|||
|'&='
|
||||
|'|='
|
||||
|'^='
|
||||
|'>>='
|
||||
|'>>>='
|
||||
|'\>>='
|
||||
|'>\>>='
|
||||
|'\<\<='
|
||||
|'%=') e
|
||||
;
|
||||
|
@ -54,3 +67,4 @@ type_: ID
|
|||
ID : ('a'..'z'|'A'..'Z'|'_'|'$')+;
|
||||
INT : '0'..'9'+ ;
|
||||
WS : (' '|'\n') -> skip ;
|
||||
>>
|
|
@ -0,0 +1,9 @@
|
|||
import "JavaExpressions.stg"
|
||||
|
||||
Input() ::= "a|b&c"
|
||||
|
||||
Output() ::= <<
|
||||
(s (e (e a) | (e (e b) & (e c))) \<EOF>)<\n>
|
||||
>>
|
||||
|
||||
Errors() ::= ""
|
|
@ -0,0 +1,9 @@
|
|||
import "JavaExpressions.stg"
|
||||
|
||||
Input() ::= "a.f(x)==T.c"
|
||||
|
||||
Output() ::= <<
|
||||
(s (e (e (e (e a) . f) ( (expressionList (e x)) )) == (e (e T) . c)) \<EOF>)<\n>
|
||||
>>
|
||||
|
||||
Errors() ::= ""
|
|
@ -0,0 +1,9 @@
|
|||
import "JavaExpressions.stg"
|
||||
|
||||
Input() ::= "a.f().g(x,1)"
|
||||
|
||||
Output() ::= <<
|
||||
(s (e (e (e (e (e a) . f) ( )) . g) ( (expressionList (e x) , (e 1)) )) \<EOF>)<\n>
|
||||
>>
|
||||
|
||||
Errors() ::= ""
|
|
@ -0,0 +1,9 @@
|
|||
import "JavaExpressions.stg"
|
||||
|
||||
Input() ::= "new T[((n-1) * x) + 1]"
|
||||
|
||||
Output() ::= <<
|
||||
(s (e new (type_ T) [ (e (e ( (e (e ( (e (e n) - (e 1)) )) * (e x)) )) + (e 1)) ]) \<EOF>)<\n>
|
||||
>>
|
||||
|
||||
Errors() ::= ""
|
|
@ -0,0 +1,9 @@
|
|||
import "JavaExpressions.stg"
|
||||
|
||||
Input() ::= "(a|b)&c"
|
||||
|
||||
Output() ::= <<
|
||||
(s (e (e ( (e (e a) | (e b)) )) & (e c)) \<EOF>)<\n>
|
||||
>>
|
||||
|
||||
Errors() ::= ""
|
|
@ -0,0 +1,9 @@
|
|||
import "JavaExpressions.stg"
|
||||
|
||||
Input() ::= "a > b"
|
||||
|
||||
Output() ::= <<
|
||||
(s (e (e a) > (e b)) \<EOF>)<\n>
|
||||
>>
|
||||
|
||||
Errors() ::= ""
|
|
@ -0,0 +1,9 @@
|
|||
import "JavaExpressions.stg"
|
||||
|
||||
Input() ::= "a >> b"
|
||||
|
||||
Output() ::= <<
|
||||
(s (e (e a) \>> (e b)) \<EOF>)<\n>
|
||||
>>
|
||||
|
||||
Errors() ::= ""
|
|
@ -0,0 +1,9 @@
|
|||
import "JavaExpressions.stg"
|
||||
|
||||
Input() ::= "a=b=c"
|
||||
|
||||
Output() ::= <<
|
||||
(s (e (e a) = (e (e b) = (e c))) \<EOF>)<\n>
|
||||
>>
|
||||
|
||||
Errors() ::= ""
|
|
@ -0,0 +1,9 @@
|
|||
import "JavaExpressions.stg"
|
||||
|
||||
Input() ::= "a^b^c"
|
||||
|
||||
Output() ::= <<
|
||||
(s (e (e a) ^ (e (e b) ^ (e c))) \<EOF>)<\n>
|
||||
>>
|
||||
|
||||
Errors() ::= ""
|
|
@ -0,0 +1,9 @@
|
|||
import "JavaExpressions.stg"
|
||||
|
||||
Input() ::= "(T)x"
|
||||
|
||||
Output() ::= <<
|
||||
(s (e ( (type_ T) ) (e x)) \<EOF>)<\n>
|
||||
>>
|
||||
|
||||
Errors() ::= ""
|
|
@ -0,0 +1,9 @@
|
|||
import "JavaExpressions.stg"
|
||||
|
||||
Input() ::= "new A().b"
|
||||
|
||||
Output() ::= <<
|
||||
(s (e (e new (type_ A) ( )) . b) \<EOF>)<\n>
|
||||
>>
|
||||
|
||||
Errors() ::= ""
|
|
@ -0,0 +1,9 @@
|
|||
import "JavaExpressions.stg"
|
||||
|
||||
Input() ::= "(T)t.f()"
|
||||
|
||||
Output() ::= <<
|
||||
(s (e (e ( (type_ T) ) (e (e t) . f)) ( )) \<EOF>)<\n>
|
||||
>>
|
||||
|
||||
Errors() ::= ""
|
|
@ -1,3 +1,16 @@
|
|||
TestType() ::= "Parser"
|
||||
|
||||
Options ::= [
|
||||
"Debug": false
|
||||
]
|
||||
|
||||
Grammar ::= [
|
||||
"T": {<grammar("T")>}
|
||||
]
|
||||
|
||||
Rule() ::= "s"
|
||||
|
||||
grammar(grammarName) ::= <<
|
||||
grammar <grammarName>;
|
||||
s @after {<ToStringTree("$ctx"):writeln()>} : e;
|
||||
e : a=e op=('*'|'/') b=e {}
|
||||
|
@ -6,3 +19,4 @@ e : a=e op=('*'|'/') b=e {}
|
|||
;
|
||||
INT : '0'..'9'+ ;
|
||||
WS : (' '|'\n') -> skip ;
|
||||
>>
|
|
@ -0,0 +1,9 @@
|
|||
import "LabelsOnOpSubrule.stg"
|
||||
|
||||
Input() ::= "4"
|
||||
|
||||
Output() ::= <<
|
||||
(s (e 4))<\n>
|
||||
>>
|
||||
|
||||
Errors() ::= ""
|
|
@ -0,0 +1,9 @@
|
|||
import "LabelsOnOpSubrule.stg"
|
||||
|
||||
Input() ::= "1*2/3"
|
||||
|
||||
Output() ::= <<
|
||||
(s (e (e (e 1) * (e 2)) / (e 3)))<\n>
|
||||
>>
|
||||
|
||||
Errors() ::= ""
|
|
@ -0,0 +1,9 @@
|
|||
import "LabelsOnOpSubrule.stg"
|
||||
|
||||
Input() ::= "(1/2)*3"
|
||||
|
||||
Output() ::= <<
|
||||
(s (e (e ( (e (e 1) / (e 2)) )) * (e 3)))<\n>
|
||||
>>
|
||||
|
||||
Errors() ::= ""
|
|
@ -0,0 +1,28 @@
|
|||
/**
|
||||
* This is a regression test for antlr/antlr4#625 "Duplicate action breaks
|
||||
* operator precedence"
|
||||
* https://github.com/antlr/antlr4/issues/625
|
||||
*/
|
||||
|
||||
TestType() ::= "Parser"
|
||||
|
||||
Options ::= [
|
||||
"Debug": false
|
||||
]
|
||||
|
||||
Grammar ::= [
|
||||
"T": {<grammar("T")>}
|
||||
]
|
||||
|
||||
Rule() ::= "s"
|
||||
|
||||
grammar(grammarName) ::= <<
|
||||
grammar <grammarName>;
|
||||
s @after {<ToStringTree("$ctx"):writeln()>} : e ;
|
||||
e : a=e op=('*'|'/') b=e {}{}
|
||||
| INT {}{}
|
||||
| '(' x=e ')' {}{}
|
||||
;
|
||||
INT : '0'..'9'+ ;
|
||||
WS : (' '|'\n') -> skip ;
|
||||
>>
|
|
@ -0,0 +1,29 @@
|
|||
/**
|
||||
* This is a regression test for antlr/antlr4#625 "Duplicate action breaks
|
||||
* operator precedence"
|
||||
* https://github.com/antlr/antlr4/issues/625
|
||||
*/
|
||||
|
||||
TestType() ::= "Parser"
|
||||
|
||||
Options ::= [
|
||||
"Debug": false
|
||||
]
|
||||
|
||||
Grammar ::= [
|
||||
"T": {<grammar("T")>}
|
||||
]
|
||||
|
||||
Rule() ::= "s"
|
||||
|
||||
grammar(grammarName) ::= <<
|
||||
grammar <grammarName>;
|
||||
s @after {<ToStringTree("$ctx"):writeln()>} : e ;
|
||||
e : a=e op=('*'|'/') b=e {}{<True()>}?
|
||||
| a=e op=('+'|'-') b=e {}\<p=3>{<True()>}?\<fail='Message'>
|
||||
| INT {}{}
|
||||
| '(' x=e ')' {}{}
|
||||
;
|
||||
INT : '0'..'9'+ ;
|
||||
WS : (' '|'\n') -> skip ;
|
||||
>>
|
|
@ -0,0 +1,9 @@
|
|||
import "MultipleActionsPredicatesOptions.stg"
|
||||
|
||||
Input() ::= "4"
|
||||
|
||||
Output() ::= <<
|
||||
(s (e 4))<\n>
|
||||
>>
|
||||
|
||||
Errors() ::= ""
|
|
@ -0,0 +1,9 @@
|
|||
import "MultipleActionsPredicatesOptions.stg"
|
||||
|
||||
Input() ::= "1*2/3"
|
||||
|
||||
Output() ::= <<
|
||||
(s (e (e (e 1) * (e 2)) / (e 3)))<\n>
|
||||
>>
|
||||
|
||||
Errors() ::= ""
|
|
@ -0,0 +1,9 @@
|
|||
import "MultipleActionsPredicatesOptions.stg"
|
||||
|
||||
Input() ::= "(1/2)*3"
|
||||
|
||||
Output() ::= <<
|
||||
(s (e (e ( (e (e 1) / (e 2)) )) * (e 3)))<\n>
|
||||
>>
|
||||
|
||||
Errors() ::= ""
|
|
@ -0,0 +1,9 @@
|
|||
import "MultipleActions.stg"
|
||||
|
||||
Input() ::= "4"
|
||||
|
||||
Output() ::= <<
|
||||
(s (e 4))<\n>
|
||||
>>
|
||||
|
||||
Errors() ::= ""
|
|
@ -0,0 +1,9 @@
|
|||
import "MultipleActions.stg"
|
||||
|
||||
Input() ::= "1*2/3"
|
||||
|
||||
Output() ::= <<
|
||||
(s (e (e (e 1) * (e 2)) / (e 3)))<\n>
|
||||
>>
|
||||
|
||||
Errors() ::= ""
|
|
@ -0,0 +1,9 @@
|
|||
import "MultipleActions.stg"
|
||||
|
||||
Input() ::= "(1/2)*3"
|
||||
|
||||
Output() ::= <<
|
||||
(s (e (e ( (e (e 1) / (e 2)) )) * (e 3)))<\n>
|
||||
>>
|
||||
|
||||
Errors() ::= ""
|
|
@ -1,3 +1,23 @@
|
|||
/**
|
||||
* This is a regression test for antlr/antlr4#433 "Not all context accessor
|
||||
* methods are generated when an alternative rule label is used for multiple
|
||||
* alternatives".
|
||||
* https://github.com/antlr/antlr4/issues/433
|
||||
*/
|
||||
|
||||
TestType() ::= "Parser"
|
||||
|
||||
Options ::= [
|
||||
"Debug": false
|
||||
]
|
||||
|
||||
Grammar ::= [
|
||||
"T": {<grammar("T")>}
|
||||
]
|
||||
|
||||
Rule() ::= "s"
|
||||
|
||||
grammar(grammarName) ::= <<
|
||||
grammar <grammarName>;
|
||||
s : e {<writeln("$e.v")>};
|
||||
e returns [int v]
|
||||
|
@ -14,3 +34,4 @@ INT : '0'..'9'+ ;
|
|||
INC : '++' ;
|
||||
DEC : '--' ;
|
||||
WS : (' '|'\n') -> skip ;
|
||||
>>
|
|
@ -0,0 +1,9 @@
|
|||
import "MultipleAlternativesWithCommonLabel.stg"
|
||||
|
||||
Input() ::= "4"
|
||||
|
||||
Output() ::= <<
|
||||
4<\n>
|
||||
>>
|
||||
|
||||
Errors() ::= ""
|
|
@ -0,0 +1,9 @@
|
|||
import "MultipleAlternativesWithCommonLabel.stg"
|
||||
|
||||
Input() ::= "1+2"
|
||||
|
||||
Output() ::= <<
|
||||
3<\n>
|
||||
>>
|
||||
|
||||
Errors() ::= ""
|
|
@ -0,0 +1,9 @@
|
|||
import "MultipleAlternativesWithCommonLabel.stg"
|
||||
|
||||
Input() ::= "1+2*3"
|
||||
|
||||
Output() ::= <<
|
||||
7<\n>
|
||||
>>
|
||||
|
||||
Errors() ::= ""
|
|
@ -0,0 +1,9 @@
|
|||
import "MultipleAlternativesWithCommonLabel.stg"
|
||||
|
||||
Input() ::= "i++*3"
|
||||
|
||||
Output() ::= <<
|
||||
12<\n>
|
||||
>>
|
||||
|
||||
Errors() ::= ""
|
|
@ -0,0 +1,34 @@
|
|||
/**
|
||||
* This is a regression test for antlr/antlr4#509 "Incorrect rule chosen in
|
||||
* unambiguous grammar".
|
||||
* https://github.com/antlr/antlr4/issues/509
|
||||
*/
|
||||
|
||||
TestType() ::= "Parser"
|
||||
|
||||
Options ::= [
|
||||
"Debug": false
|
||||
]
|
||||
|
||||
Grammar ::= [
|
||||
"T": {<grammar("T")>}
|
||||
]
|
||||
|
||||
Input() ::= "aa"
|
||||
|
||||
Rule() ::= "prog"
|
||||
|
||||
Output() ::= <<
|
||||
(prog (statement (letterA a)) (statement (letterA a)) \<EOF>)<\n>
|
||||
>>
|
||||
|
||||
Errors() ::= ""
|
||||
|
||||
grammar(grammarName) ::= <<
|
||||
grammar <grammarName>;
|
||||
prog
|
||||
@after {<ToStringTree("$ctx"):writeln()>}
|
||||
: statement* EOF {};
|
||||
statement: letterA | statement letterA 'b' ;
|
||||
letterA: 'a';
|
||||
>>
|
|
@ -1,3 +1,16 @@
|
|||
TestType() ::= "Parser"
|
||||
|
||||
Options ::= [
|
||||
"Debug": false
|
||||
]
|
||||
|
||||
Grammar ::= [
|
||||
"T": {<grammar("T")>}
|
||||
]
|
||||
|
||||
Rule() ::= "s"
|
||||
|
||||
grammar(grammarName) ::= <<
|
||||
grammar <grammarName>;
|
||||
s : e {<writeln("$e.result")>} ;
|
||||
e returns [String result]
|
||||
|
@ -8,4 +21,4 @@ e returns [String result]
|
|||
ID : 'a'..'z'+ ;
|
||||
INT : '0'..'9'+ ;
|
||||
WS : (' '|'\n') -> skip ;
|
||||
|
||||
>>
|
|
@ -0,0 +1,9 @@
|
|||
import "PrefixOpWithActionAndLabel.stg"
|
||||
|
||||
Input() ::= "a"
|
||||
|
||||
Output() ::= <<
|
||||
a<\n>
|
||||
>>
|
||||
|
||||
Errors() ::= ""
|
|
@ -0,0 +1,9 @@
|
|||
import "PrefixOpWithActionAndLabel.stg"
|
||||
|
||||
Input() ::= "a+b"
|
||||
|
||||
Output() ::= <<
|
||||
(a+b)<\n>
|
||||
>>
|
||||
|
||||
Errors() ::= ""
|
|
@ -0,0 +1,9 @@
|
|||
import "PrefixOpWithActionAndLabel.stg"
|
||||
|
||||
Input() ::= "a=b+c"
|
||||
|
||||
Output() ::= <<
|
||||
((a=b)+c)<\n>
|
||||
>>
|
||||
|
||||
Errors() ::= ""
|
|
@ -1,3 +1,16 @@
|
|||
TestType() ::= "Parser"
|
||||
|
||||
Options ::= [
|
||||
"Debug": false
|
||||
]
|
||||
|
||||
Grammar ::= [
|
||||
"T": {<grammar("T")>}
|
||||
]
|
||||
|
||||
Rule() ::= "s"
|
||||
|
||||
grammar(grammarName) ::= <<
|
||||
grammar <grammarName>;
|
||||
s : e {<writeln("$e.v")>};
|
||||
e returns [int v, <StringList()> ignored]
|
||||
|
@ -9,3 +22,4 @@ e returns [int v, <StringList()> ignored]
|
|||
INT : '0'..'9'+ ;
|
||||
WS : (' '|'\n') -> skip ;
|
||||
|
||||
>>
|
|
@ -1,3 +1,16 @@
|
|||
TestType() ::= "Parser"
|
||||
|
||||
Options ::= [
|
||||
"Debug": false
|
||||
]
|
||||
|
||||
Grammar ::= [
|
||||
"T": {<grammar("T")>}
|
||||
]
|
||||
|
||||
Rule() ::= "s"
|
||||
|
||||
grammar(grammarName) ::= <<
|
||||
grammar <grammarName>;
|
||||
s : q=e {<writeln("$e.v")>};
|
||||
e returns [int v]
|
||||
|
@ -12,3 +25,4 @@ e returns [int v]
|
|||
ID : 'a'..'z'+ ;
|
||||
INT : '0'..'9'+ ;
|
||||
WS : (' '|'\n') -> skip ;
|
||||
>>
|
|
@ -0,0 +1,9 @@
|
|||
import "ReturnValueAndActionsAndLabels.stg"
|
||||
|
||||
Input() ::= "4"
|
||||
|
||||
Output() ::= <<
|
||||
4<\n>
|
||||
>>
|
||||
|
||||
Errors() ::= ""
|
|
@ -0,0 +1,9 @@
|
|||
import "ReturnValueAndActionsAndLabels.stg"
|
||||
|
||||
Input() ::= "1+2"
|
||||
|
||||
Output() ::= <<
|
||||
3<\n>
|
||||
>>
|
||||
|
||||
Errors() ::= ""
|
|
@ -0,0 +1,9 @@
|
|||
import "ReturnValueAndActionsAndLabels.stg"
|
||||
|
||||
Input() ::= "1+2*3"
|
||||
|
||||
Output() ::= <<
|
||||
7<\n>
|
||||
>>
|
||||
|
||||
Errors() ::= ""
|
|
@ -0,0 +1,9 @@
|
|||
import "ReturnValueAndActionsAndLabels.stg"
|
||||
|
||||
Input() ::= "i++*3"
|
||||
|
||||
Output() ::= <<
|
||||
12<\n>
|
||||
>>
|
||||
|
||||
Errors() ::= ""
|
|
@ -0,0 +1,36 @@
|
|||
/**
|
||||
* This is a regression test for antlr/antlr4#677 "labels not working in
|
||||
* grammar file".
|
||||
* https://github.com/antlr/antlr4/issues/677
|
||||
*
|
||||
* <p>This test treats {@code ,} and {@code >>} as part of a single compound
|
||||
* operator (similar to a ternary operator).</p>
|
||||
*/
|
||||
|
||||
TestType() ::= "Parser"
|
||||
|
||||
Options ::= [
|
||||
"Debug": false
|
||||
]
|
||||
|
||||
Grammar ::= [
|
||||
"T": {<grammar("T")>}
|
||||
]
|
||||
|
||||
Rule() ::= "s"
|
||||
|
||||
grammar(grammarName) ::= <<
|
||||
grammar <grammarName>;
|
||||
s @after {<ToStringTree("$ctx"):writeln()>} : expr EOF;
|
||||
expr:
|
||||
a=expr '*' a=expr #Factor
|
||||
| b+=expr (',' b+=expr)* '\>>' c=expr #Send
|
||||
| ID #JustId //semantic check on modifiers
|
||||
;
|
||||
|
||||
ID : ('a'..'z'|'A'..'Z'|'_')
|
||||
('a'..'z'|'A'..'Z'|'0'..'9'|'_')*
|
||||
;
|
||||
|
||||
WS : [ \t\n]+ -> skip ;
|
||||
>>
|
|
@ -0,0 +1,9 @@
|
|||
import "ReturnValueAndActionsList1.stg"
|
||||
|
||||
Input() ::= "a*b"
|
||||
|
||||
Output() ::= <<
|
||||
(s (expr (expr a) * (expr b)) \<EOF>)<\n>
|
||||
>>
|
||||
|
||||
Errors() ::= ""
|
|
@ -0,0 +1,9 @@
|
|||
import "ReturnValueAndActionsList1.stg"
|
||||
|
||||
Input() ::= "a,c>>x"
|
||||
|
||||
Output() ::= <<
|
||||
(s (expr (expr a) , (expr c) \>> (expr x)) \<EOF>)<\n>
|
||||
>>
|
||||
|
||||
Errors() ::= ""
|
|
@ -0,0 +1,9 @@
|
|||
import "ReturnValueAndActionsList1.stg"
|
||||
|
||||
Input() ::= "x"
|
||||
|
||||
Output() ::= <<
|
||||
(s (expr x) \<EOF>)<\n>
|
||||
>>
|
||||
|
||||
Errors() ::= ""
|
|
@ -0,0 +1,9 @@
|
|||
import "ReturnValueAndActionsList1.stg"
|
||||
|
||||
Input() ::= "a*b,c,x*y>>r"
|
||||
|
||||
Output() ::= <<
|
||||
(s (expr (expr (expr a) * (expr b)) , (expr c) , (expr (expr x) * (expr y)) \>> (expr r)) \<EOF>)<\n>
|
||||
>>
|
||||
|
||||
Errors() ::= ""
|
|
@ -0,0 +1,34 @@
|
|||
/**
|
||||
* This is a regression test for antlr/antlr4#677 "labels not working in
|
||||
* grammar file".
|
||||
* https://github.com/antlr/antlr4/issues/677
|
||||
*
|
||||
* <p>This test treats the {@code ,} and {@code >>} operators separately.</p>
|
||||
*/
|
||||
|
||||
TestType() ::= "Parser"
|
||||
|
||||
Options ::= [
|
||||
"Debug": false
|
||||
]
|
||||
|
||||
Grammar ::= [
|
||||
"T": {<grammar("T")>}
|
||||
]
|
||||
|
||||
Rule() ::= "s"
|
||||
|
||||
grammar(grammarName) ::= <<
|
||||
grammar <grammarName>;
|
||||
s @after {<ToStringTree("$ctx"):writeln()>} : expr EOF;
|
||||
expr:
|
||||
a=expr '*' a=expr #Factor
|
||||
| b+=expr ',' b+=expr #Comma
|
||||
| b+=expr '\>>' c=expr #Send
|
||||
| ID #JustId //semantic check on modifiers
|
||||
;
|
||||
ID : ('a'..'z'|'A'..'Z'|'_')
|
||||
('a'..'z'|'A'..'Z'|'0'..'9'|'_')*
|
||||
;
|
||||
WS : [ \t\n]+ -> skip ;
|
||||
>>
|
|
@ -0,0 +1,9 @@
|
|||
import "ReturnValueAndActionsList2.stg"
|
||||
|
||||
Input() ::= "a*b"
|
||||
|
||||
Output() ::= <<
|
||||
(s (expr (expr a) * (expr b)) \<EOF>)<\n>
|
||||
>>
|
||||
|
||||
Errors() ::= ""
|
|
@ -0,0 +1,9 @@
|
|||
import "ReturnValueAndActionsList2.stg"
|
||||
|
||||
Input() ::= "a,c>>x"
|
||||
|
||||
Output() ::= <<
|
||||
(s (expr (expr (expr a) , (expr c)) \>> (expr x)) \<EOF>)<\n>
|
||||
>>
|
||||
|
||||
Errors() ::= ""
|
|
@ -0,0 +1,9 @@
|
|||
import "ReturnValueAndActionsList2.stg"
|
||||
|
||||
Input() ::= "x"
|
||||
|
||||
Output() ::= <<
|
||||
(s (expr x) \<EOF>)<\n>
|
||||
>>
|
||||
|
||||
Errors() ::= ""
|
|
@ -0,0 +1,9 @@
|
|||
import "ReturnValueAndActionsList2.stg"
|
||||
|
||||
Input() ::= "a*b,c,x*y>>r"
|
||||
|
||||
Output() ::= <<
|
||||
(s (expr (expr (expr (expr (expr a) * (expr b)) , (expr c)) , (expr (expr x) * (expr y))) \>> (expr r)) \<EOF>)<\n>
|
||||
>>
|
||||
|
||||
Errors() ::= ""
|
|
@ -0,0 +1,9 @@
|
|||
import "ReturnValueAndActions.stg"
|
||||
|
||||
Input() ::= "4"
|
||||
|
||||
Output() ::= <<
|
||||
4<\n>
|
||||
>>
|
||||
|
||||
Errors() ::= ""
|
|
@ -0,0 +1,9 @@
|
|||
import "ReturnValueAndActions.stg"
|
||||
|
||||
Input() ::= "1+2"
|
||||
|
||||
Output() ::= <<
|
||||
3<\n>
|
||||
>>
|
||||
|
||||
Errors() ::= ""
|
|
@ -0,0 +1,9 @@
|
|||
import "ReturnValueAndActions.stg"
|
||||
|
||||
Input() ::= "1+2*3"
|
||||
|
||||
Output() ::= <<
|
||||
7<\n>
|
||||
>>
|
||||
|
||||
Errors() ::= ""
|
|
@ -0,0 +1,9 @@
|
|||
import "ReturnValueAndActions.stg"
|
||||
|
||||
Input() ::= "(1+2)*3"
|
||||
|
||||
Output() ::= <<
|
||||
9<\n>
|
||||
>>
|
||||
|
||||
Errors() ::= ""
|
|
@ -0,0 +1,29 @@
|
|||
TestType() ::= "Parser"
|
||||
|
||||
Options ::= [
|
||||
"Debug": false
|
||||
]
|
||||
|
||||
Grammar ::= [
|
||||
"T": {<grammar("T")>}
|
||||
]
|
||||
|
||||
Input() ::= "x y z"
|
||||
|
||||
Rule() ::= "s"
|
||||
|
||||
Output() ::= <<
|
||||
(s (a (a (a x) y) z))<\n>
|
||||
>>
|
||||
|
||||
Errors() ::= ""
|
||||
|
||||
grammar(grammarName) ::= <<
|
||||
grammar <grammarName>;
|
||||
s @after {<ToStringTree("$ctx"):writeln()>} : a ;
|
||||
a : a {<True()>}? ID
|
||||
| ID
|
||||
;
|
||||
ID : 'a'..'z'+ ;
|
||||
WS : (' '|'\n') -> skip ;
|
||||
>>
|
|
@ -0,0 +1,31 @@
|
|||
TestType() ::= "Parser"
|
||||
|
||||
Options ::= [
|
||||
"Debug": false
|
||||
]
|
||||
|
||||
Grammar ::= [
|
||||
"T": {<grammar("T")>}
|
||||
]
|
||||
|
||||
Input() ::= "x y z"
|
||||
|
||||
Rule() ::= "s"
|
||||
|
||||
Output() ::= <<
|
||||
(s (a (a x) y z))<\n>
|
||||
>>
|
||||
|
||||
Errors() ::= <<
|
||||
line 1:4 rule a custom message<\n>
|
||||
>>
|
||||
|
||||
grammar(grammarName) ::= <<
|
||||
grammar <grammarName>;
|
||||
s @after {<ToStringTree("$ctx"):writeln()>} : a ;
|
||||
a : a ID {<False()>}?\<fail='custom message'>
|
||||
| ID
|
||||
;
|
||||
ID : 'a'..'z'+ ;
|
||||
WS : (' '|'\n') -> skip ;
|
||||
>>
|
|
@ -0,0 +1,21 @@
|
|||
TestType() ::= "Parser"
|
||||
|
||||
Options ::= [
|
||||
"Debug": false
|
||||
]
|
||||
|
||||
Grammar ::= [
|
||||
"T": {<grammar("T")>}
|
||||
]
|
||||
|
||||
Rule() ::= "s"
|
||||
|
||||
grammar(grammarName) ::= <<
|
||||
grammar <grammarName>;
|
||||
s @after {<ToStringTree("$ctx"):writeln()>} : a ;
|
||||
a : a ID
|
||||
| ID
|
||||
;
|
||||
ID : 'a'..'z'+ ;
|
||||
WS : (' '|'\n') -> skip ;
|
||||
>>
|
|
@ -0,0 +1,9 @@
|
|||
import "Simple.stg"
|
||||
|
||||
Input() ::= "x"
|
||||
|
||||
Output() ::= <<
|
||||
(s (a x))<\n>
|
||||
>>
|
||||
|
||||
Errors() ::= ""
|
|
@ -0,0 +1,9 @@
|
|||
import "Simple.stg"
|
||||
|
||||
Input() ::= "x y"
|
||||
|
||||
Output() ::= <<
|
||||
(s (a (a x) y))<\n>
|
||||
>>
|
||||
|
||||
Errors() ::= ""
|
|
@ -0,0 +1,9 @@
|
|||
import "Simple.stg"
|
||||
|
||||
Input() ::= "x y z"
|
||||
|
||||
Output() ::= <<
|
||||
(s (a (a (a x) y) z))<\n>
|
||||
>>
|
||||
|
||||
Errors() ::= ""
|
|
@ -1,3 +1,16 @@
|
|||
TestType() ::= "Parser"
|
||||
|
||||
Options ::= [
|
||||
"Debug": false
|
||||
]
|
||||
|
||||
Grammar ::= [
|
||||
"T": {<grammar("T")>}
|
||||
]
|
||||
|
||||
Rule() ::= "s"
|
||||
|
||||
grammar(grammarName) ::= <<
|
||||
grammar <grammarName>;
|
||||
s @after {<ToStringTree("$ctx"):writeln()>} : e EOF ; // must indicate EOF can follow or 'a\<EOF>' won't match
|
||||
e : e '*' e
|
||||
|
@ -8,3 +21,4 @@ e : e '*' e
|
|||
;
|
||||
ID : 'a'..'z'+ ;
|
||||
WS : (' '|'\n') -> skip ;
|
||||
>>
|
|
@ -0,0 +1,30 @@
|
|||
/**
|
||||
* This is a regression test for antlr/antlr4#542 "First alternative cannot
|
||||
* be right-associative".
|
||||
* https://github.com/antlr/antlr4/issues/542
|
||||
*/
|
||||
|
||||
TestType() ::= "Parser"
|
||||
|
||||
Options ::= [
|
||||
"Debug": false
|
||||
]
|
||||
|
||||
Grammar ::= [
|
||||
"T": {<grammar("T")>}
|
||||
]
|
||||
|
||||
Rule() ::= "s"
|
||||
|
||||
grammar(grammarName) ::= <<
|
||||
grammar <grammarName>;
|
||||
s @after {<ToStringTree("$ctx"):writeln()>} : e EOF; // must indicate EOF can follow or 'a\<EOF>' won't match
|
||||
e :\<assoc=right> e '*' e
|
||||
|\<assoc=right> e '+' e
|
||||
|\<assoc=right> e '?' e ':' e
|
||||
|\<assoc=right> e '=' e
|
||||
| ID
|
||||
;
|
||||
ID : 'a'..'z'+ ;
|
||||
WS : (' '|'\n') -> skip ;
|
||||
>>
|
|
@ -0,0 +1,9 @@
|
|||
import "TernaryExprExplicitAssociativity.stg"
|
||||
|
||||
Input() ::= "a"
|
||||
|
||||
Output() ::= <<
|
||||
(s (e a) \<EOF>)<\n>
|
||||
>>
|
||||
|
||||
Errors() ::= ""
|
|
@ -0,0 +1,9 @@
|
|||
import "TernaryExprExplicitAssociativity.stg"
|
||||
|
||||
Input() ::= "a+b"
|
||||
|
||||
Output() ::= <<
|
||||
(s (e (e a) + (e b)) \<EOF>)<\n>
|
||||
>>
|
||||
|
||||
Errors() ::= ""
|
|
@ -0,0 +1,9 @@
|
|||
import "TernaryExprExplicitAssociativity.stg"
|
||||
|
||||
Input() ::= "a*b"
|
||||
|
||||
Output() ::= <<
|
||||
(s (e (e a) * (e b)) \<EOF>)<\n>
|
||||
>>
|
||||
|
||||
Errors() ::= ""
|
|
@ -0,0 +1,9 @@
|
|||
import "TernaryExprExplicitAssociativity.stg"
|
||||
|
||||
Input() ::= "a?b:c"
|
||||
|
||||
Output() ::= <<
|
||||
(s (e (e a) ? (e b) : (e c)) \<EOF>)<\n>
|
||||
>>
|
||||
|
||||
Errors() ::= ""
|
|
@ -0,0 +1,9 @@
|
|||
import "TernaryExprExplicitAssociativity.stg"
|
||||
|
||||
Input() ::= "a=b=c"
|
||||
|
||||
Output() ::= <<
|
||||
(s (e (e a) = (e (e b) = (e c))) \<EOF>)<\n>
|
||||
>>
|
||||
|
||||
Errors() ::= ""
|
|
@ -0,0 +1,9 @@
|
|||
import "TernaryExprExplicitAssociativity.stg"
|
||||
|
||||
Input() ::= "a?b+c:d"
|
||||
|
||||
Output() ::= <<
|
||||
(s (e (e a) ? (e (e b) + (e c)) : (e d)) \<EOF>)<\n>
|
||||
>>
|
||||
|
||||
Errors() ::= ""
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue