有人可以帮我编写嵌套if语句的正确语法规则吗? 在我的语言,我能写出结构是这样的:PLY yacc解析IF-ELSE IF-ELSE嵌套语句
(IF CONDITION)
some statements
(IF CONDITION)
some statements
(ELSE IF CONDITION)
some statements
(ELSE IF CONDITION)
some statements
(ELSE IF CONDITION)
some statements
(ELSE)
some statements
(END)
some statements
(ELSE IF CONDITION)
some statements
(ELSE)
some statements
(END)
我写的词法所以左,右括号是RULE_OPEN
和RULE_CLOSE
令牌, “IF”是IF
令牌, “END”是END
令牌, “ELSE”是ELSE
令牌, “CONDITION”是CONDITION
令牌。
假设“某些语句”可能是我的语言允许的任何内容(如使用通用编程语言)。可能无限地嵌套IF语句是很重要的。
希望这是明确的,请让我知道如果我解释得不好。
无论我如何尝试。我总是得到转换/减少冲突,解析器不接受正确的输入。
尽管如此,我已经成功编写了规则。当我为else添加规则时,如果代码对我来说开始变得非常复杂。
下面是我sucessfull方法没有别的,如果部分(我只列出了相关的规则):
statements: statement
statements: statements statement
statement: code
| data_out
| rule
rule: inline_if_statement
| block_if_statement
block_if_statement: RULE_OPEN IF CONDITION RULE_CLOSE statements RULE_OPEN END RULE_CLOSE
block_if_statement: RULE_OPEN IF CONDITION RULE_CLOSE statements block_else_statement
block_else_statement: RULE_OPEN ELSE RULE_CLOSE statements RULE_OPEN END RULE_CLOSE
block_else_statement: empty
empty :
我认为这是在解析非常普遍的问题,我希望有人在这里已经解决了这个问题: - ) 感谢您的帮助!
非常感谢您的回答和资源链接。这对我帮助很大。 – JoshuaBoshi 2012-07-16 10:38:40
你将如何实现这一点,只使用空格来嵌入代码块:例如'''如果表达式\ n返回这个\ n其他\ n返回那个''' – 2013-12-10 02:33:30
@StevePeak我想你可能想检查这个链接http:/ /stackoverflow.com/questions/9420400/python-parser-for-python-like-language – JoshuaBoshi 2013-12-11 15:24:18