野牛输入分析器 - 关于可选语法和输入解释的基本问题

时间:2010-05-27 13:08:06

标签: input bison lexical-analysis

我是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=$以来,我需要重新解释印第安纳州的印第安纳州。

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

1 个答案:

答案 0 :(得分:1)

Q1:我假设我们有4个可能的令牌:NAME,' - ','='和VALUE

然后语法看起来像这样:

attrs: 
    attr attrs
    | attr
    ;

attr:
   '-' NAME '=' VALUE
   ;

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

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