标签: antlr

为只有一个字符的标识符定义 antlr 规则

我喜欢定义一个非常简单的规则,它应该代表标识符。这对于长度超过 1 个字符的标识符非常有效,但对于只有 1 个字符的标识符,我会得到 MismatchedTokenException(64!=45)。这是规则:

ID : ('a'..'z' | 'A'..'Z')+ ;

这有什么问题吗?

谢谢!

antlr

0
推荐指数
1
解决办法
1498
查看次数

Antlr 和左递归规则

我正在尝试使用 ANTLR 编写语法,但我无法理解 antlr 如何处理递归选择。

我阅读了很多文章和论坛,但无法解决我的问题...

这是我语法的一小部分:

grammar MyGrammar;

ComponentRef :
    IDENT ('[' Expression (',' Expression)* ']')?
;

Expression:
    ComponentRef ('(' FunctionArguments ')')?
;

FunctionArguments:
    Expression (',' Expression)*
;

IDENT: ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'_'|'0'..'9')*;
Run Code Online (Sandbox Code Playgroud)

我仍然不明白为什么它不起作用......没有歧义!不是吗?

以下是我的语法应该使用的一些代码示例:

a
a[b,c]
a[b[c], d]
func(a)
func(a,b,c)
func[a](b,c)
func(a[b], c[d])
func[a](b[c])
Run Code Online (Sandbox Code Playgroud)

提前谢谢你!

recursion antlr ambiguity

0
推荐指数
1
解决办法
3439
查看次数

无法匹配 antlr4 中的 az 字符

我有以下语法:

grammar lab02;

@header{
  package laboratorios.lab02;
}

word    : [a-z]+ ;
op_plus : '+' ;
op_min  : '-' ;
op_mul  : '*' ;
op_div  : '/' ;
WS      : [ \t\r\n]+ -> skip ;
digit   : ('0'|'1'|'2'|'3'|'4'|'5'|'6'|'7'|'8'|'9') ;
Run Code Online (Sandbox Code Playgroud)

这给出了一个错误说: error(50): lab02.g4:7:10: syntax error: 'a-z' came as a complete surprise to me while matching alternative.

我从一个例子中复制了它,但它在我的电脑上不起作用。看看数字规则:digit : ('0'|'1'|'2'|'3'|'4'|'5'|'6'|'7'|'8'|'9') ;它是这样的,因为这是它不会报告错误的唯一方法。如果我使用 [0-9]+ 我得到:

error(50): lab02.g4:7:10: syntax error: '0-9' came as a complete surprise to me while matching alternative
Run Code Online (Sandbox Code Playgroud)

你知道为什么这不起作用吗?

antlr antlr4

0
推荐指数
1
解决办法
1896
查看次数

antlr生成python代码是可行的吗?

要求是生成几个继承基本ORM类的类,这个类可能有几个静态属性,如列和其他东西,以及一些可以在运行时为小型业务逻辑进行评估的python表达式,

我的问题是,将antlr用于此类事情是可行的,因为我对antlr并不熟悉,但谷歌建议我使用antlr进行python代码生成器...

请指教......

python code-generation antlr

-1
推荐指数
1
解决办法
593
查看次数

标签 统计

antlr ×4

ambiguity ×1

antlr4 ×1

code-generation ×1

python ×1

recursion ×1