小编pat*_*c1a的帖子

无法弄清楚为什么 Bison 抛出“由于冲突,规则在解析器中无用”

我正在为一种非常简单的编程语言编写 BNF 语法,并使用 Flex 和 Bison 进行编译。
我只有 3 种变量和常量类型:real、integer、string
我的 .l 文件具有“ID”的标记定义,如下所示:

DIGIT [0-9]
LETTER [a-zA-Z]
ID {LETTER}({LETTER}|{DIGIT})*
Run Code Online (Sandbox Code Playgroud)


我的 .y 文件有一个标识符的定义,如下所示:

identifier:
ID;
Run Code Online (Sandbox Code Playgroud)

现在,我想使用标识符定义来构建变量和常量名称。但我也想限制对相同类型数据的赋值(例如,我不希望将字符串分配给整数变量)。所以我创建了一些规​​则来区分每种变量和常量:

id_variable_string:
identifier;

id_variable_integer:
identifier;

id_variable_real:
identifier;
Run Code Online (Sandbox Code Playgroud)

我对常量做了同样的事情。现在,在我的语言中,我有一个用于常量声明/定义的部分,然后是一个用于变量声明的部分。也就是说,常量在赋值的同时声明(类似于“myConstant = 123”),但必须首先声明变量,然后在专门为语句设计的部分中赋值。
例如,如果我想要一个整数和一个字符串变量,我必须首先声明它们:
STRING myStrVariable;
整数 myIntVariable;
然后,在为语句保留的区域中,我可以选择进行赋值(语句可以是赋值、决策、选择、输出等):

assignment: 
        id_variable_string ASSIGN_OPERATOR literal_string
        | id_variable_string ASSIGN_OPERATOR id_const_string 
        | id_variable_string ASSIGN_OPERATOR id_variable_string 
        | id_variable_string ASSIGN_OPERATOR concatenacion  
        | id_variable_integer ASSIGN_OPERATOR id_const_integer 
        | id_variable_integer ASSIGN_OPERATOR id_variable_integer  
        | id_variable_integer ASSIGN_OPERATOR expression 
        | id_variable_integer ASSIGN_OPERATOR literal_integer
        | id_variable_real ASSIGN_OPERATOR …
Run Code Online (Sandbox Code Playgroud)

grammar bnf bison flex-lexer

5
推荐指数
1
解决办法
7405
查看次数

UML:如何显示具有同一类的 2 个集合的类?

在我的 UML 类图中,我通常通过将属性名称放在关联两个类的箭头上方来进行对象集合(与其他符号相反,后者只是添加带有表示多重性的括号的属性)。但是我有一些情况,其中有多个相同类型的对象集合。例如(一个非常简单的例子): 简单聚合图

假设有一门课程有一些学生申请了它(所以我有一个学生的集合,假设一个属性是 Student 的 ArrayList,称为“applied”)。但是,我还需要保留实际参加过课程的学生的单独集合(比方说,“参加”:另一个属性是 ArrayList,或者甚至是不同的集合类型,如学生的 Vector)。

我应该在关系线上添加所有属性名称吗?

我正在寻找以标准 UML 方式执行此操作的方法。之所以澄清这一点,是因为我知道 UML 规则在我们需要时可以很灵活。

collections uml class aggregation

1
推荐指数
1
解决办法
2144
查看次数

标签 统计

aggregation ×1

bison ×1

bnf ×1

class ×1

collections ×1

flex-lexer ×1

grammar ×1

uml ×1