我想解析以下来源:
unit SystemGeneralAR;
interface
uses AbstractRecord, OracleData, systemgeneral_auto_gen;
type
TSystemGeneral = class(TSystemGeneralbase)
public
destructor Destroy; override;
class function All(): ISystemGeneralResultSet; reintroduce;
end;
implementation
uses testa, testb;
end.问题是,使用列表可以附加,但不能。我试图将使用更改为使用,但这将给我一个emtpy使用列表,即使其中存在。
顺便说一句:我的语法是这样的:
S = unit-decl interface<any>*implementation<any>*<'.'>
unit-decl = 'unit'<space>*identifier<space>*<';'>
unit-name = identifier
interface = <interface_dec> uses
interface_dec = <space>*'interface'<space>*
implementation = <'implementation'>impl_body
impl_body = uses
uses = <space>*<'uses'><space>*uses_list
uses_list = (uses_element<','>)*(uses_element<';'>)
uses_element = <space>*identifier<space>*
identifier = #'[A-Za-z|_]+'
space = #' '
any = #'[A-Za-z|_| |,|;|=|(|)|:]'生成的带有uses*的解析树如下所示:
[:S [:unit-decl "unit" [:identifier "SystemGeneralAR"]] [:interface]
[:implementation [:impl_body]]]如果只是使用,它看起来就像:
[:S
[:unit-decl "unit" [:identifier "SystemGeneralAR"]]
[:interface
[:uses
[:uses_list
[:uses_element [:identifier "AbstractRecord"]]
[:uses_element [:identifier "OracleData"]]
[:uses_element [:identifier "systemgeneral_auto_gen"]]]]]
[:implementation
[:impl_body [:uses [:uses_list [:uses_element [:identifier "testa"]] [:uses_element [:identifier "testb"]]]]]]]发布于 2016-04-09 12:11:29
罗杰
下面是一个有效的、经过测试的用例语法。我试着用你所拥有的,但它失败了,而且看上去不完整。下面是两个示例,用于演示条件存在时的可选外观:
S = A <space> B [<space> optC]
A = "a"
B = "b"
C = "c"
optC = C
space = #' '以下是两项产出:
;input 1 = "a b"
;produces
=> [:S [:A "a"] [:B "b"]]
input 2 = "a b c"
;produces
=> [:S [:A "a"] [:B "b"] [:optC [:C "c"]]]和你的语法。正如我说的,我遇到了麻烦,因为它似乎没有完全定义,但总的来说:
(* If you change this *)
interface = <interface_dec> uses
(* to this, you should get similar results *)
interface = <interface_dec> [uses] 如果这样做不起作用,那么您将需要提供一个语法,该语法与所提供的输入示例不同步。
https://stackoverflow.com/questions/36499530
复制相似问题