我是Flex / Bison的新手,所以这是非常航海的问题 请原谅我。可能看起来像家庭作业问题 - 但我需要根据以下概念实施项目。
我的问题涉及两个部分,
问题1
在Bison解析器中,如何为可选输入提供规则。
就像,我需要解析声明 示例:
-country='USA' -state='INDIANA' -population='100' -ratio='0.5' -comment='Census study for Indiana'
此处比率标记可以是可选的。同样,如果我有许多令牌可选,那么如何在解析器中提供相同的语法呢?
我的代码看起来像,
%启动程序
程序:TK_COUNTRY TK_IDENTIFIER TK_STATE TK_IDENTIFIER TK_POPULATION TK_IDENTIFIER ...
其中所有标记都在词法分析器中定义。由于有许多令牌是可选的,如果我使用“|”然后会有许多不同的输入组合方式。
问题2
注释很可能作为输入的一部分有引号,所以我添加了一个用户可以提供的标记-tag来解释它,
示例:
-country='USA' -state='INDIANA' -population='100' -ratio='0.5' -comment='Census study for Indiana$'s population' -tag=$
现在,自-tag=$
以来,我需要重新解释印第安纳州的印第安纳州。
请提供任何输入或相关材料以了解这些主题。
答案 0 :(得分:1)
Q1:我假设我们有4个可能的令牌:NAME,' - ','='和VALUE
然后语法看起来像这样:
attrs:
attr attrs
| attr
;
attr:
'-' NAME '=' VALUE
;
请注意,与您制作特定属性名称区分标记不同,没有办法说“我们必须有国家,州和人口,但比例是可选的”。 这将是分析解析器生成的数据的程序部分的任务。
Q2:我理解这一点,你想到在解析器运行时改变词法分析的工作方式。这不是一个好主意,至少不适合初学者。你有没有开始考虑词法分析,而不是解析?