- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 ANTLR 语法中写下了以下语句:
loopStatement
: 'loop' (statement|exit)* 'end' 'loop' ';'
;
如果我没理解错的话,(statement|exit)*
的意思是我可以有一个statement
或者一个exit statement
。那是即 statement_1 exit_1
,或 statement_1
,或 statement_1 statement_2,exit_1
,对吗?
我的解析器可以工作,除了没有语句的时候。
例如:
这个有效:
loop
x:=x+1; <<< statement_1
exit when x=9; <<<<exit_1
end loop;
这也有效(没有 exit
):
loop
x:=x+1; <<< statement_1
<<<<exit_1 (no exit)
end loop;
但是这个不有效(没有声明
):
loop
<<< statement_1
exit when x=9; <<<<exit_1
end loop;
我的语法有问题吗?
最佳答案
pantelis wrote:
If I understand correctly,
(statement|exit)*
means that I can have astatement
or anexit statement
.
准确地说,(statement|exit)*
匹配空字符串,或者零个或多个 statement
或 exit
语句(在没有具体顺序!)。所以它会匹配:
但是,为什么不让您的 exit
语句只是一个常规语句呢?我的小演示:
loopStatement
: 'loop' statement* 'end' 'loop' ';'
;
statement
: 'exit' 'when' expression ';' // exit statement
| ID ':=' expression ';' // assignment
;
expression
: equalityExpression
;
equalityExpression
: addExpression ('=' addExpression)*
;
addExpression
: atom ('+' atom)*
;
atom
: ID
| Number
| '(' expression ')'
;
ID
: 'a'..'z'+
;
Number
: '0'..'9'+
;
正确解析所有 3 个示例:
loop
x:=x+1;
exit when x=9;
end loop;
loop
x:=x+1;
end loop;
loop
exit when x=9;
end loop;
或者什么都没有:
loop
end loop;
关于antlr - 语句或退出语句的 ANTLR 文法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5400483/
我正在尝试实现一个表达式处理语法(处理嵌套括号和其他内容)。到目前为止我有以下内容,但它们无法处理某些情况(成功/失败情况出现在以下代码块之后)。有人知道这是怎么回事吗? 注意:varname +=
我在 ANTLR 语法中写下了以下语句: loopStatement : 'loop' (statement|exit)* 'end' 'loop' ';' ; 如果我没理解错的话,
为 C 的一个子集编写一个简单的 BNF 语法,它支持多个语句,包括赋值、if-else 和没有 block 语句的 while 语句。为你的非终结符使用有意义的名字(相对于神秘的字母)。假设变量由单
我正在尝试为以下语法创建一个 LALR(1) 解析器并发现一些移位/归约冲突。 S := expr expr := lval | ID '[' expr ']' OF expr lval := ID
根据这个paper的规则: If A is the start nonterminal, put EOF in FOLLOW(A) Find the productions with A on the
为 k > 1 制作人工 LR(k) 文法很容易: Input: A1 B x Input: A2 B y (introduce reduce-reduce con
在使用 make 和 bison 的项目中,我很难指定编译语法 grammar.tab.c 依赖于语法输入 grammar.y,每个目标文件都依赖于相应的源文件(包括 grammar.tab.o),并
我正在尝试从语法分析树中提取乔姆斯基范式 (CNF) - 句子的语法产生式: (ROOT (S (NP (DT the) (NNS kids)) (VP (VBD opened)
我知道 ANTLR 可以接受 LL(*) 文法。但是,有没有办法使用 ANTLR 检查语法是否是 LL(1)? 最佳答案 options { k = 1; } 如果您的语法不在 LL(1) 中,
我还没有找到答案。是否存在无法转换为 LL(1) 的上下文无关且无歧义的语法? 我发现了一个我不知道如何转换为 LL(1) 的作品:parameter-type-list C99中的生产: param
我是一名优秀的程序员,十分优秀!