我的语言中空格很小,因此我跳过了它。这是我到目前为止的语法的子集:
start: expr <EOF>;
expr
: atom
| expr '|' expr
| expr expr+
| '{' expr '}'
;
atom
: ATOM_TOKEN
;
fragment LETTER: [a-zA-Z];
fragment DIGIT: [0-9];
ATOM_TOKEN: (LETTER | DIGIT)+;
WS: [ \r\n\t]+ -> skip;
在以下输入上执行(请注意空白和缺少空白)时,它会正确生成所需的预期分析树:
{hello42 | hi world}|{good bye} red blue green
现在,我的问题是,理想情况下,我想将atom
设为嵌套规则,以便挑选出具有代表性的作品。
这是一个示例语法:
atom: atomToken+;
atomToken
: LETTERS
| DIGITS
;
LETTERS: LETTER+;
DIGITS: DIGIT+;
以及通过它运行he11o
的结果(注意1代替L):
这种方法的问题在于,由于忽略了空格,因此he11o world
之类的东西现在将解析为单个atom
。
有什么明显的我想念的东西吗?根据我的研究,有两种可能性。
atom
的片段时,写一个辅助语法。这似乎是最简单的解决方案。感谢您的帮助。