是的,重用对象是可能的。解析调用的典型序列如下所示:
input.load(newText);
errors.clear();
lexer.reset();
lexer.setInputStream(&input); // Not just reset(), which only rewinds the current position.
tokens.setTokenSource(&lexer);
parser.reset();
...
这可能是解析器服务类的一部分。所有对
首先,我阅读了以下类似问题的解决方案:
我仍然不明白为什么我会收到以下信息:
行1:0在“程序”处缺少“程序”
当我尝试匹配以下内容时:
PROGRAM test
BEGIN
END
我的语法:
grammar Wengo;
program : PROGRAM id BEGIN pgm_body END ;
id : IDENTIFIER ;
pgm_body : decl func_declarations ;
decl
这是我的XML解析器语法:
attribute : Name '=' STRING ;
还有lexer:
STRING : '"' ~[<"]* '"'
| '\'' ~[<']* '\''
;
我把文本用引号括起来,比如:“hello”,而不是hello。
因此,我尝试将解析器语法更改为:
attribute : Name '=' '"' STRING ;
或
我得到了一个错误:“无法为非组合语
我希望能够解析像“test”test这样的字符串
使用ANTLR4
我的语法:
QUOTE: ('\''|'"');
STRING: QUOTE .*? QUOTE;
SQUOTE: '\'';
DQUOTE: '"';
STRING: (SQUOTE .*? SQUOTE | DQUOTE .*? DQUOTE );
我的解析器:
matcher: STRING;
在另一个员额上,提议下列可能性:
语法:
QUOTE: ('\''|'"');
STRING: QUOTE .*? QU
标签: Antlr4
abstract-syntax-tree
我有一个ANTLR3语法,它构建了一个抽象语法树。我正在考虑升级到ANTLR4。然而,ANTLR4似乎只构建解析树,而不是抽象语法树。例如,output=AST选项不再被识别。此外,AST和抽象语法均未出现在最终ANTLR4参考的文本中
我想知道我是否遗漏了什么
我的应用程序目前知道如何爬过ANTLR3生成的AST。将其更改为处理解析树并不是不可能的,但需要做一些工作。在我开始这条路之前,我想确定这是必要的。ANTLR 4基于语法生成解析树,而不是基于任意AST运算符和/或重写规则生成AST。这
我定义了一种我们在公司中使用的SQL风格,如下所示:
/** Grammars always start with a grammar header. This grammar is called
* GigyaSQL and must match the filename: GigyaSQL.g4
*/
grammar GigyaSQL;
parse
: selectClause
fromClause
( whereClause )?
( filterClause
我一直在看位于以下位置的语法:
我一直在使用AntlRworks2查看它们,但是我发现很难找到整个语法的开始规则
我认为开始规则的定义是一个没有其他指向它的指针的节点,有没有人能找到这些语法的开始规则的有效解决方案?要找到根/开始规则,我已经实现了一个ANTLR树侦听器,它创建了ANTLR语法中所有规则的邻接列表,并检查是否没有其他语法规则引用它。这将提示开始规则可能是什么
要运行此程序,您需要从
以下是侦听器实现:
(RootFinder.java)
从技术上讲,您可以使用任何解析器规则作为
我有(从第109行开始)在IDE中用于收集有关正在编辑的源代码文件(其Z80程序集)的信息
我需要触发一个解析器规则,或者有一个健壮的方法来解释解析树(ErrorNodes),以检测用户输入的不完整/部分文本
我添加了一个“部分”解析器规则,它使用底部定义的任意标记捕获所有字符。然而,这不起作用
我还试着查看解析树,看看是否有某种方法可以编写逻辑(在我的侦听器中)来将其提取出来,但似乎新的部分文本有时甚至没有出现在解析树中…听起来像是孤岛语法。通常的过程(例如,请参阅ANTLR 4书中的“将XM
对于Sam和我一直在研究的问题,我想让代码生成工具创建一个单独的typescript文件来保存从命名语法输入生成的所有类。这个输出文件结构会很难吗
例如,我想要Expr.g4->Expr.g4.ts。一个文件TypeScript文件可以包含{ExprLexer、ExprParser、和ExprListener}类的命名导出,如果需要,还可以包含访问者代码,甚至可能是一些松散的工厂函数等
我一直在研究下面的源代码,以了解输出文件的数量和名称是如何确定的,特别是发现,这个类与特定于语言的目标类一起工
这个问题是关于如何在访问antlr规则时区分可选标记
我在一个名为“assign”的antlr4语法中定义了一个解析器规则,它试图将表达式的结果分配给由INT表示的标记,例如215=“FOO”。它还允许分配到标记索引,例如215[2]=“FOO”。我的问题是,在赋值规则的评估过程中,如何通过查看antlr提供的对象来区分表单215的整数与表单215[2]的整数
assign : INT '=' expr ;
INT : '-'? DIGIT+ ('[' DIGIT+ ']')?;
D
我很不好意思问。。。
我用typecast为这种语言编写了一个语法,从int到bool,反之亦然
logic_expr : expr NOT? OR | AND expr
| expr '|' expr SMALLER | LARGER
| NUMBER
| NUMBER_SHORT
| IDENT
| LOGIC_DEFINED
;
math_expr : expr ADD | SUB expr
|
我将Antlr4语法简化为:
grammar test;
many:
('[' INT ']')*;
INT: '-'? '0'..'9'+;
在ANTLRWorks 2.1中,它在“[”和“]”上给出警告
Implicit token definition in parser rule
为什么它们是警告
我不应该在语法分析器规则中使用直接字符或字符串?隐式标记引用是语法分析器规则中的字符串文本,它包含由ANTLR4隐式创建的lexer标记。这是一种不好的做法,在使用隐式标记时可
我是ANTLR的n00b,通过尝试在ANTLR4中运行ASN.1解析器,我变得越来越强大。我目前正处于将输入文件传递给grun的阶段,并看到类似“第1行:12029输入时没有可行的替代方案…”这样的错误
我试图将这与我的规则中的一些问题联系起来,但是通过字符计数定位有问题的输入是一个挑战。ANTLR解析器将输入视为一行是正常的,还是因为规则问题(我在OSX系统上)而无法识别EOL?如果将输入视为一个长行是正常的,有人能推荐一种工具来定位文件中给定的字符位置吗?您的代码是否只使用\r行结尾?ANT
如何将带有子树的ParserRuleContext展平为令牌数组?ParserRuleContext.getTokens(intttype)看起来不错。但是什么是t类型?是令牌类型吗?如果要包括所有令牌类型,使用什么值?parseruleContext.getTokens(int ttype)仅检索父节点的某些子节点:它不会递归进入父树
然而,写下自己的话很容易:
/**
*按顺序从{@code tree}中检索所有标记。
*
*@param树
*要从中获取所有令牌的解析tee。
*
*@按顺序
是否有任何方法可以使用Antlr4Java7语法来解析java8文件,而无需对java.g4语法文件进行太多更改。据我所知,从java7到java8的语法变化是lambda表达式语法和双列运算符。我能够合并lambda表达式,但在当前语法文件中包含双列运算符似乎有点复杂 您是否尝试过ANTLR repo中的Java8语法:?是的。但我不能简单地从Java7迁移到Java8。我已经编写了一套API,它依赖于Java7语法的规则名称。我一直在寻找的是将Java8新引入的语法元素合并到我现有的Java
我是antlr的新手。我想写一个语法来解析以下输入:
commit a1b2c3d4
语法如下所示:
grammar commit;
file : 'commit' COMMITHASH NEWLINE;
COMMITHASH : [a-z0-9]+;
DATE : ~[\r\n]+;
NEWLINE : '\r'?'\n';
当我尝试使用语法解析上述输入时,它抛出以下异常::
第1行:0不匹配的输入“提交a1b2c3d4”应为“提交”
注意:我故意添加了日期标记。如果
我试图弄清楚如何使antlr4在输入文件中的给定点而不是顶部执行。我听取了SO用户的建议,并开始使用Antlr4访问者解决方案
我的输入文件声明了类似“BASIC”的子例程,并且在底部有一个Main。输入文件示例:
#Program hello;
Sub mysub1()
print "please dont call me but I know you will";
End Sub
Sub mysub2()
#code
End Sub
这个问题与本书中的Cymbol代码有关(~第143页):
每个组件返回什么:“ctx.type()”、“start”、“getType()”?这本书没有对这些名字作任何解释
我可以“有点”理解“ctx.type()”指的是“type”规则,“getType()”返回与之关联的数字。但是“开始”到底是做什么的呢
另外,概括一下这个问题:获取规则返回的值/结构的机制是什么?特别是在侦听器中使用的上下文中
我可以看到,对于ID,它是:
String name = ctx.ID().getText();
我试图写一个语法来解析单行注释。以“---”开头的注释可以出现在文件中的任何位置
我的基本语法如下所示
语法(aa.g4):
测试等级:
输入:
输出:
--comment1a
--ifcommentif(x)首先,您应该定义您真正想要的行注释规则。非贪婪运算符没有按您所希望的方式执行
LineComment
: '--' ~[\r\n]* -> channel(HIDDEN)
;
其次,如果希望令牌流包含有关空格和换行符的信息,则应将它们移动到隐藏通道,而不是使用skip命令。
我还是ANTLR的新手,如果我发布了一个明显的问题,那么很抱歉
我的语法比较简单。我需要的是用户能够输入以下内容:
if (condition)
{
return true
}
else if (condition)
{
return false
}
else
{
if (condition)
{
return true
}
return false
}
在我下面的语法中,是否有方法确保在输入字符串不包含“return”语句时标
标签: Antlr4
abstract-syntax-tree
我知道任何源代码都可以转换为AST。现在我想将AST转换回源代码,但与语言无关。有什么工具可以帮我吗?
所谓语言独立,我特别指的是python和java您心目中的是源代码转换器,它涉及的不仅仅是从解析树生成一些代码(ANTLR4不创建AST btw)。通常,这样的翻译器将解析树转换为一个中间表示,它抽象出各种语言结构,然后使用这些结构在目标语言中生成代码(对目标语言中不可用的源语言、优化等进行了大量特殊处理).根据我的意见,您不能将AST转换回源代码。因为生成的ast可能是任何语言,并且您无法将
这是我的解析器语法的一部分:
expression:
multiplyingExpression
(
PLUS multiplyingExpression #plus
| MINUS multiplyingExpression #minus
)*;
我想定义加减替代标签,显然它不允许我这样做
在#加号和@减号处,它给出了错误:
查找规则元素时在“#”处缺少RPAREN
有人知道如何在不改变规则定义结构的情况下实现这一点吗?alt标签只能在alt的外边缘(非
我使用的是一步语法,当我运行grun时,它非常有效:
grun ObjectiveC translationUnit~/Desktop/test.h-gui
但是,当使用以下代码运行生成的java解析器时:
试试看{
AntlInputStream inputStream=新的AntlInputStream(
“@interface TestInterface\r@property(非原子,赋值)BOOL testProp;\r@end”);
ObjectiveCLexer lexer=新的Ob
我想用Antlr4编写一个语法来解析某个定义,但我一直在努力让Antlr合作
定义有两种类型的线,一种类型,一种属性。我可以让语法正确解析类型行,但它要么忽略属性行,要么无法识别属性类型,这取决于我如何调整语法
这是我的语法(尝试583):
以下是一个示例输入:
type SimpleType
intProp1: int
stringProp2 : String
(返回类型,但忽略intProp1、stringProp2。)
我做错了什么?通常,当规则与整个输入不匹配
当十进制和千位分隔符十进制分组字符依赖于区域设置调用系统时,如何编写正确解析浮点数的Antlr v4语法
目前,我尝试在传递到解析器之前交换输入字符串中的字符,虽然这可以工作,但感觉像是一个黑客。有没有办法制作一个参数化解析器,其中一些东西可以作为参数传递,比如这些标记的字符值?解析器和lexer构造算法通常假设字母表是固定的,而不是可变的。在构造时准备运行时决策时,这是一个非常有用的假设,而且语言定义是明确的
请注意,当嵌入到更复杂的上下文中时,本地化的数字可能会导致歧义。例如,在德语中,用逗
标签: Antlr4
abstract-syntax-tree
在使用java org.antlr.v4.Tool-visitor-lib scanner/parser/decf.g进行这些操作之后,生成了该指令(DecafParserBaseListener.java、DecafParserBaseVisitor.java、DecafParserListener.java、decafparservicistor.java)。我们的问题是如何使用这种方法来制作AST Short:在Antlr4中还没有。
它在Antlr3中可用,但到目前为止已在Antlr4的
我有以下Antlr4语法:
grammar CategoryExpr;
@header {
package org.example.antlr;
}
moneyTerm
: dollars moneyTermSuffixes*
;
moneyTermSuffixes
: '*' DIGITS # MoneyMult
| '/' DIGITS # MoneyDiv
;
dollars : DIGITS ('.' DIGITS)? ;
DIGITS : [0-
我正试图为CAL语言编写一个解析器,但遇到了以下错误
line 3:12 mismatched input ')' expecting {'(', '+', '-', True, False, Number, ID}
line 8:4 no viable alternative at input 'func'
line 8:10 mismatched input ')' expecting {If, While, Skipp, Begin, ID}
line 8:11 extraneous in
上一页 1 2 ...
10 11 12 13 14 15 ...
下一页 共 15 页