标签: antlr

ANTLR运算符优先级

如何在ANTLR中实现运算符优先级?

我目前正在使用XText/Antlr包.

编辑:

我做了sepp2k建议的,现在运算符优先级有效,但是3 +*这样的东西现在也可以工作了.操作员基本上"摔倒"树.

另外,我在ANTLR的网站上尝试了C语法,同样的事情发生在ANTLRworks中.

谁知道问题是什么?

BinaryExpression:
  'or'? AndOp; //or op

AndOp:
  'and'? ComparisonOp;

ComparisonOp:
  ('>'|'<'|'>='|'<='|'=='|'~=')? ConcatOp;

ConcatOp:
  '..'? AddSubOp;

AddSubOp:
  ('+' | '-')? MultDivOp;

MultDivOp:
  ('*' | '/')? ExpOp;

ExpOp:
  '^'? expr=Expression;
Run Code Online (Sandbox Code Playgroud)

compiler-construction antlr xtext

9
推荐指数
1
解决办法
7005
查看次数

与Flex/Bison相比,使用ANTLR有什么缺点?

几年前,我在本科学习期间一直在研究Flex,Bison.但是,我现在不记得了.最近,我听说过ANTLR.

  • 你会建议我学习ANTLR或者更好地刷一下Flex/Bison吗?
  • ANTLR的功能是否比Flex/Bison更多/更少?

antlr bison jflex flex-lexer

9
推荐指数
1
解决办法
6448
查看次数

使用ANTLR解析JavaScript正则表达式

我有一个ANTLR JavaScript语法(取自Internet),它似乎支持除正则表达式文字之外的所有内容.

正则表达式文字的问题在于你有两个规则,基本上:

multiplicativeExpression
    : unaryExpression (LT!* ('*' | '/' | '%')^ LT!* unaryExpression)*
Run Code Online (Sandbox Code Playgroud)

regexLiteral
    : '/' RegexLiteralChar* '/'
Run Code Online (Sandbox Code Playgroud)

规则RegexLiteralChar使用不同于正常表达式的词法规则(例如,双引号不会终止它).

这意味着我需要以某种方式从我的解析器中改变某种词法分析器状态.我怎样才能做到这一点?它甚至可能吗?

javascript antlr

9
推荐指数
1
解决办法
1247
查看次数

antlr匹配任何字符除外

我有以下片段的定义:

fragment CHAR   :'a'..'z'|'A'..'Z'|'\n'|'\t'|'\\'|EOF;  
Run Code Online (Sandbox Code Playgroud)

现在我必须为字符串定义词法分析器规则.我做了以下事情:

STRING   : '"'(CHAR)*'"'
Run Code Online (Sandbox Code Playgroud)

但是在字符串中我希望匹配除新行'\n'以外的所有字符.有什么想法我能做到吗?

string antlr char match

9
推荐指数
1
解决办法
1万
查看次数

什么是ANTLR4的最小样本Gradle项目(使用antlr插件)?

我已经创建了新的Gradle项目

apply plugin: 'antlr'
Run Code Online (Sandbox Code Playgroud)

dependencies {
    antlr "org.antlr:antlr4:4.5.3"
Run Code Online (Sandbox Code Playgroud)

build.gradle.

创建src/main/antlr/test.g4具有以下内容的文件

grammar test;
r   : 'hello' ID;
ID  : [a-z]+ ;
WS  : [ \t\r\n]+ -> skip ;
Run Code Online (Sandbox Code Playgroud)

但它不起作用.没有生成java源文件(并且没有发生错误).

我错过了什么?

项目在这里:https://github.com/dims12/AntlrGradlePluginTest2

UPDATE

我发现我的样本实际上是有效的,但它把代码放到\build\generated-src了我没想到的地方:羞耻:

java antlr gradle antlr4

9
推荐指数
4
解决办法
7347
查看次数

如何在ANTLR中管理可选空格?

我试图解析ANTLR中的数据文件 - 它具有可选的空格

 3 6
  97   12
 15 18
Run Code Online (Sandbox Code Playgroud)

以下显示了行的开始和结束位置.最后有一个换行符,没有标签.

^ 3 6$
^  97   12$
^ 15 18$
^
Run Code Online (Sandbox Code Playgroud)

我的语法是:

lines   :   line+;
line    :   ws1 {System.out.println("WSOPT :"+$ws1.text+":");} 
                num1 {System.out.println("NUM1 "+$num1.text);} 
                ws2 {System.out.println("WS :"+$ws2.text+":");}
                num2 {System.out.println("NUM2 "+$num2.text);} 
                NEWLINE
    ;
num1    :    INT    ;
num2    :    INT    ;
ws1 :   WSOPT;
ws2 :   WS;

INT     : '0'..'9'+;
NEWLINE :    '\r'? '\n';
//WS    :   (' '|'\t' )+ ;
WS  :   (' ')+ ;
WSOPT   :   (' ')* ;
Run Code Online (Sandbox Code Playgroud)

这使

line 1:0 …
Run Code Online (Sandbox Code Playgroud)

java whitespace antlr

8
推荐指数
2
解决办法
1万
查看次数

AS3语法:最准确

我正在寻找一个准确的AS3语法(格式不是问题,但我认为ANTLR最具特色)用于我正在制作的练习语法.

什么是AS3最准确的语法?

grammar antlr bnf actionscript-3 ebnf

8
推荐指数
1
解决办法
3331
查看次数

ANTLR决策可以使用多个备选方案匹配输入

我有这个简单的语法:

expr: factor;

factor: atom (('*' ^ | '/'^) atom)*;

atom: INT
    | ':' expr;

INT: ('0'..'9')+
Run Code Online (Sandbox Code Playgroud)

当我跑它时它说:

决策可以使用多个替代1,2匹配输入,例如'*'

决策可以使用多个备选方案1,2匹配输入,例如'/'

我无法发现模棱两可.红色箭头是如何指向的?任何帮助,将不胜感激.

在此输入图像描述

java antlr antlr3

8
推荐指数
1
解决办法
3730
查看次数

使用ANTLR为java源代码生成抽象语法树

如何使用ANTLR从java src代码生成AST?
任何帮助?

java antlr abstract-syntax-tree

8
推荐指数
2
解决办法
8676
查看次数

ANTLR和Eclipse(或任何体面的IDE)

我使用ANTLRv3IDE插件已经使用ANTLR和Eclipse一段时间了.虽然它并不完美,而且有点过时,但它的工作做得相当不错.

现在我希望切换到ANTLRv4用于我正在创建的另一个DSL.但是,Eclipse支持似乎非常薄.我决定尝试一个NetBeans插件的ANTLRWorks,但是我无法安装它(它似乎被锁定到特定的日期版本(201302132200,而我有更新的东西,仍然是文档说的7.3)依赖项).

所以,问题是:有没有人设置任何 Java IDE(最好是Eclipse,但我可以被说服切换,如果支持对其他东西有好处)与ANTLR集成?使用集成,我的意思是:代码生成保存/键盘快捷方式和语法着色(至少).代码完成和其他功能当然很好,但我现在可以没有它们.

我很清楚Xtext,我在一些项目中使用它非常成功,但遗憾的是它不适合这里的需求(不需要IDE支持,需要我自己的DSL模型不基于ECore等).

我知道ANTLRWorks可以在没有Java IDE的情况下作为独立应用程序运行,但我认为这是最后的解决方案,因为以这种方式工作非常麻烦(在应用程序之间切换,文件不同步,没有VCS支持等) .我尝试了另一种方法:将Java部件安装到ANTLRworks(它本身就是一个NetBeans发行版)中,但它并没有很好地结束(似乎基本的项目支持等被从ANTLRworks中删除).

eclipse antlr antlrworks antlr4

8
推荐指数
1
解决办法
5242
查看次数