我正在为一种古老的语言发展语法。
@assign[@var1 (1+3)*2]
@assign[@var2 "foo" $ "bar"]
@assign[@var2 "foo" $ "bar"]
@assign[var2 "foo" $ "bar"]
@assign
[@var2 "foo"
$ "bar"]
@assign
[var2 "foo"
$ "bar"]
@var1 @var2
@assign[@var1 (1+3)*2]
@assign[@var2 "foo" $ "bar"]
@var1 @var2
IS:
8 foobar
以下是我从Mu语法文件开始编写的语法:
grammar Grammar;
////////////////
// PARSER //
////////////////
file
: block EOF
;
block
: stat*
;
stat
: assignment
| print
;
assignment
: ASSIGN LBRACKET variable expr RBRACKET
;
print
: AT ID
;
expr
: expr CONCAT expr #concatExpr
| expr MUL expr #mulExpr
| expr DIV expr #divExpr
| expr ADD expr #addExpr
| expr SUB expr #subExpr
| atom #atomExpr
;
variable
: AT ID
| ID
;
atom
: LPARENS expr RPARENS #parExpr
| INT #intAtom
| STRING #stringAtom
| variable #variableAtom
;
///////////////
// LEXER //
///////////////
ASSIGN : AT 'assign' ;
AT : '@' ;
ID : [a-zA-Z_] [a-zA-Z_0-9]* ;
INT
: [0-9]+
;
LBRACKET : '[' ;
RBRACKET : ']' ;
LPARENS : '(' ;
RPARENS : ')' ;
CONCAT : '$' ;
ADD : '+' ;
SUB : '-' ;
MUL : '*' ;
DIV : '/' ;
WS : [ \t\r\n] -> skip ;
COMMENT : '[*' .*? '*]' -> skip ;
STRING : '"' (~["\r\n] | '""')* '"' ;
为了打印变量,我开发了一个定制的访问者。访问visitPrint方法,我知道有两个令牌:AT和id。
@assign[@var1 "one"]
@assign[var2 "two"]
@assign[var3 var1 $ var2]
Value of var3 is: @var3
Value of var3 is: onetwo
print
: AT ID
| ?????? //Help!
;
print
: AT ID
| .+?
;
提前谢了。
这看起来类似于Parr的“确定的ANTLR4参考”第12.3章中将XML标记与文本分离的示例。他使用lexer中的模式在XML标记内部和外部(即纯文本)之间切换令牌输出。
在您的例子中,似乎“@assign”和“]”充当标记(模式1),否则您可以在识别变量后将输入打印到输出。
我是ANTLR的新手,并使用ANTLR4(4.7.2 Jar文件)。我目前正在研究Oracle解析器。我对十进制数字有问题。我只保留了相关的部分。我的语法文件如下。 我该怎么做?我尝试过使用_input.la(-1)!='.'}?等,但对我来说并不正确。我尝试了提到的许多其他步骤(大多数解决方案适用于ANTLR3,但不适用于ANTLR4)。在lexer中有没有一种简单的方法可以做到这一点?我不想编
第三行出现此错误的原因是什么? 打开控制台查看错误
本文向大家介绍SGML(标准通用标记语言)和HTML(超文本标记语言),XML(可扩展标记语言)和HTML的之间有什么关系?相关面试题,主要包含被问及SGML(标准通用标记语言)和HTML(超文本标记语言),XML(可扩展标记语言)和HTML的之间有什么关系?时的应答技巧和注意事项,需要的朋友参考一下
是否可以以某种方式将锚点(或哈希)添加到 Struts 2 操作 URL?具体来说: 我有一个html表单,如果用户单击“添加更多字段”按钮,它可以扩展更多字段。该按钮向后端发送一个html submit(动作“thismyaction”),其中一个列表对象被另一组输入字段填充。然后,操作返回到tile“thisismyform ”,它像以前一样加载相同的jsp,在这里新的字段集是可见的。 (不幸
当你将鼠标悬停在网页的某个区域时,有很多基于JavaScript的库会显示工具提示。有些相当简单,有些允许工具提示显示用CSS样式设计的超文本标记语言内容。 但是有没有一种方法可以在不使用JavaScript的情况下显示样式化的工具提示?如果您只是使用属性,标记不会被处理(例如
我正在使用GitHub提供的antlr4语法分析器和词法分析器来解析Python3中的PHP。 当我直接使用这些语法时,我的PoC代码工作: antlr试验。py 这给出了输出 当我使用以下PHP时。g4语法,我犯了很多错误: 在对pythons导入交换评论之后,我得到了这个错误 然而,当我在语法上运行antlr4工具时,我没有出错。我在这里被难住了——是什么导致了这个问题?