H
hlsl
Unregistered / Unconfirmed
GUEST, unregistred user!
我最近在写一个语法解析器(Parser),参考了Delphi帮助中的Object Pascal语法.
其中有几个符号我不是很清楚它的意思,因为似乎是简写,不是标准的EBNF表示法.
比如: IdentList -> Ident/','...
我把符号 '/' 理解为"如果有的话", 而符号 '...'理解为重复.那么整个的意思就是:
首先是一个Ident,如果后面跟一个逗号','的话,那么继续重复.
如果这个比较好说,那么下面这几个就把我弄糊涂了:
ClassFieldList -> (ClassVisibility ObjFieldList)/';'... 主要是这个
ObjFieldList -> (IdentList ':' Type)/';'...
IdentList -> Ident/','...
ClassFieldList 定义中的';'和前面的','意思应该是一样的,但是看下面的ObjFieldList,也是一样! 那么问题就来了.比如着条语句:
public
FObjField1, FObjField2: Char;
public
procedure ProcA;
其中的public是定义中的ClassVisibility, FObjField1, FObjField2是定义中的 IdentList , Char 是定义中的 Type ,那么最后的分号';' 是算ObjFieldList的还是ClassFieldList的呢?
关键问题是,不管是谁的,那么就要重复(...)。如果是ObjFieldList的,那么很明显后面没有了。如果是ClassFieldList,结果也是一样。因为后面有 procedure 这个关键字,所以后面是应该ClassMethodList了。这里就要解决一个“像前看”的问题。
我的问题就是:这个表达法中的/';'...是不是表示我前面开头说的意思呢?
其中有几个符号我不是很清楚它的意思,因为似乎是简写,不是标准的EBNF表示法.
比如: IdentList -> Ident/','...
我把符号 '/' 理解为"如果有的话", 而符号 '...'理解为重复.那么整个的意思就是:
首先是一个Ident,如果后面跟一个逗号','的话,那么继续重复.
如果这个比较好说,那么下面这几个就把我弄糊涂了:
ClassFieldList -> (ClassVisibility ObjFieldList)/';'... 主要是这个
ObjFieldList -> (IdentList ':' Type)/';'...
IdentList -> Ident/','...
ClassFieldList 定义中的';'和前面的','意思应该是一样的,但是看下面的ObjFieldList,也是一样! 那么问题就来了.比如着条语句:
public
FObjField1, FObjField2: Char;
public
procedure ProcA;
其中的public是定义中的ClassVisibility, FObjField1, FObjField2是定义中的 IdentList , Char 是定义中的 Type ,那么最后的分号';' 是算ObjFieldList的还是ClassFieldList的呢?
关键问题是,不管是谁的,那么就要重复(...)。如果是ObjFieldList的,那么很明显后面没有了。如果是ClassFieldList,结果也是一样。因为后面有 procedure 这个关键字,所以后面是应该ClassMethodList了。这里就要解决一个“像前看”的问题。
我的问题就是:这个表达法中的/';'...是不是表示我前面开头说的意思呢?