2

我对 Flex/Bison 很陌生,所以这是一个非常幼稚的问题。
如果是,请原谅我。可能看起来像家庭作业问题 - 但我需要根据以下概念实施项目。

我的问题与两个部分有关,
问题 1
在 Bison 解析器中,如何为可选输入提供规则。

就像,我需要解析语句
示例:

-country='USA' -state='INDIANA' -population='100' -ratio='0.5' -comment='Census study for Indiana'

在这里,比率标记可以是可选的。同样,如果我有许多可选标记,那么如何在解析器中提供相同的语法?

我的代码看起来像,

%start program
program : TK_COUNTRY TK_IDENTIFIER TK_STATE TK_IDENTIFIER TK_POPULATION TK_IDENTIFIER ...
其中所有标记都在词法分析器中定义。由于有很多标记是可选的,如果我使用“|” 那么将有许多不同的输入组合方式成为可能。

问题 2
评论很有可能在输入中包含引号,所以我添加了一个 token -tag,用户可以提供它来解释相同的内容,

例子 :

-country='USA' -state='INDIANA' -population='100' -ratio='0.5' -comment='Census study for Indiana$'s population' -tag=$  

现在,我需要将 Indiana$'s 重新解释为 Indiana's since -tag=$.

请提供任何输入或相关材料以了解这些主题。

4

1 回答 1

1

Q1:我假设我们有 4 个可能的标记:NAME、'-'、'=' 和 VALUE

那么语法可能如下所示:

attrs: 
    attr attrs
    | attr
    ;

attr:
   '-' NAME '=' VALUE
   ;

请注意,与您使特定属性名称区分标记不同,没有办法说“我们必须有国家、州和人口,但比率是可选的”。这将是分析解析器产生的数据的那部分程序的任务。

Q2:我理解这一点,您考虑在解析器运行时改变词法分析的工作方式。这不是一个好主意,至少对于初学者来说不是。你有没有开始考虑词法分析,而不是解析?

于 2010-05-27T15:17:35.200 回答