作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 Antrl4 来解析类似 java 的语言,其中可以使用专有查询语言在括号内编写表达式。想象一下,在 Java 方法内部,应该允许使用以下行:
List<MyObject> items = [SELECT Field1,Field2 FROM MyObject];
任何表达式中都应该允许查询语言,例如
if ([SELECT Field1,Field2 FROM MyObject]!=null) { }
也应该被允许。我的解析器需要使用两种模式的元素定义规则(在类 Java 模式下,在查询语言模式下)。
我试图将其作为孤岛语法来处理,如 Definitive Antlr4 引用中所述,但是我无法让它工作。
我正在构建我的词法分析器语法,如下
OPEN_QUERY : '[' -> pushMode(INSIDE_QUERY);
JavaIdentifier: JavaLetter JavaLetterOrDigit* ;
// omitting fragments and loads of other lexer tokens for brevity
mode INSIDE_QUERY;
CLOSE_QUERY : ']' -> popMode ;
SELECT : 'select';
FROM : 'from';
QueryIdentifier: QueryLetter QueryLetterOrDigit*;
// omitting fragments definition for brevity
在我的解析器语法中,我试图做这样的事情:
expression: normalExpression | queryExpression;
queryExpression
: '[' SELECT QueryIdentifier FROM QueryIdentifier']'
;
但这会导致第一个括号字符出现标记识别错误。
这种做法有什么问题吗?谁能指出我所犯的错误?
最佳答案
如果您转储 token 流以查看词法分析器实际在做什么,则更容易诊断此类问题。在这里,左括号在词法分析器中被识别为 OPEN_QUERY
并被识别为 CLOSE_QUERY
。因此,在解析器中指定为“[”和“]”的文字括号(作为隐式标记即)不会出现在标记流中。
通过更改为简单修复
queryExpression
: OPEN_QUERY SELECT QueryIdentifier FROM QueryIdentifier CLOSE_QUERY
;
关于java - Antlr4 - 无法获得岛屿语法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38596379/
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 6 年前。
我正在 Bokeh 上渲染等值线图。我的地理数据是一个包含多边形和多边形的 GeoJSON。 我在渲染多边形时遇到问题: 如果我提取一个要素的所有几何图形(例如,四个岛屿,在一个列表中),它们的图不会
我是一名优秀的程序员,十分优秀!