假设我有以下内容:
variableDeclaration: Identifier COLON Type SEMICOLON;
Type: T_INTEGER | T_CHAR | T_STRING | T_DOUBLE | T_BOOLEAN;
Run Code Online (Sandbox Code Playgroud)
那些T_名称只被定义为"整数","char"等.
现在假设我在一个名为LittleLanguage的测试程序的exitVariableDeclaration方法中.我可以参考LittleLanguageLexer.T_INTEGER(等),但我看不出如何确定通过上下文找到了哪些类型.
我以为它会是context.Type().getSymbol().getType()但是它没有返回正确的值.我知道我可以使用context.Type().getText()但我真的不想做字符串比较.
我错过了什么?
谢谢
通过过早地组合令牌,您正在丢失词法分析器中的信息.最好在解析器规则中组合:
variableDeclaration: Identifier COLON type SEMICOLON;
type: T_INTEGER | T_CHAR | T_STRING | T_DOUBLE | T_BOOLEAN;
Run Code Online (Sandbox Code Playgroud)
现在,type是一个TerminalNode,其底层令牌实例具有唯一类型:
variableDeclarationContext ctx = .... ;
TerminalNode typeNode = (TerminalNode) ctx.type().getChild(0);
switch(typeNode.getSymbol().getType()) {
case YourLexer.T_INTEGER:
...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1285 次 |
| 最近记录: |