你如何将ANTLR 3中编写的这部分代码翻译成ANTLR 4?
expr: (Identifier '.')=> (refIdentifier)
| (Identifier '!')=> (refIdentifier)
| (Identifier '=>')=> (lambdaExpression);
Run Code Online (Sandbox Code Playgroud)
我的意思是这种语义谓词现在似乎不存在.我可以用什么呢?
我有语法谓词,我必须转换为 Antlr 4。语法不是我自己写的,所以我不知道如何以有意义的方式转换它们。这些是我必须转换的语法的主要变体。
1.
simpleSelector
: elementName
((esPred)=>elementSubsequent)*
| ((esPred)=>elementSubsequent)+
;
esPred
: HASH | DOT | LBRACKET | COLON
;
elementSubsequent
: HASH
| cssClass
| attrib
| pseudo
;
Run Code Online (Sandbox Code Playgroud)
2.
fragment EMS :; // 'em'
fragment EXS :; // 'ex'
fragment LENGTH :; // 'px'. 'cm', 'mm', 'in'. 'pt', 'pc'
fragment ANGLE :; // 'deg', 'rad', 'grad'
fragment TIME :; // 'ms', 's'
fragment FREQ :; // 'khz', 'hz'
fragment DIMENSION :; // nnn'Somethingnotyetinvented'
fragment PERCENTAGE :; // …Run Code Online (Sandbox Code Playgroud) 我正在尝试为 PostgreSQL SQL 定义词法分析器规则。
问题在于运算符定义和行注释相互冲突。
例如@---是一个操作符标记@-后跟--注释而不是一个操作符标记@---
在grako有可能定义为负先行-样片段:
OP_MINUS: '-' ! ( '-' ) .
Run Code Online (Sandbox Code Playgroud)
在 ANTLR4 中,我找不到任何方法来回滚已经消耗的片段。
有任何想法吗?
这里的原始定义是什么 PostgreSQL 操作符可以是:
The operator name is a sequence of up to NAMEDATALEN-1
(63 by default) characters from the following list:
+ - * / < > = ~ ! @ # % ^ & | ` ?
There are a few restrictions on your choice of name:
-- and /* …Run Code Online (Sandbox Code Playgroud) 我怎么能找到以前的/左令牌词法
例如
lexer grammar TLexer;
ID : [a-zA-Z] [a-zA-Z0-9]*;
CARET : '^';
RTN : {someCond1}? CARET ID; // CARET not include this token
GLB : {someCond2}? CARET ID; // CARET not include this token
Run Code Online (Sandbox Code Playgroud)
等等