2

我在编写语法方面不是很有经验,但是假设我有这样的记录类型:(示例)

record # 1 source ages params A = 1 and b = 2 fields are A, B, C with values 1, 2, 3;
record # 2;
record # 3 source ages;
record # 4 params A = 1 and b = 2 fields are A, B, C with values 1, 2, 3;
record # 5 source ages fields are A, B, C with values 1, 2, 3;
record # 6 with values 1, 2, 3;

基本上:

  1. 必须以“记录编号”开头,并以分号结尾。
  2. 可能按以下顺序包含 0 或 1 个捕获:
  3. 源数据集
  4. 数据集参数
  5. 数据集中的字段
  6. 数据集中的值

这是我的语法,它不起作用:

--- 开始语法:

@start = record;

record = 'record' '#' numeric rest* ';';
rest = 'source' alphanumeric paramsAndOrFieldsAndOrWithValues*;
paramsAndOrFieldsAndOrWithValues = (paramsList)? (fieldsList)? (valuesList)?;
paramsList = 'params' alpha expr numeric ('and' alpha expr numeric)*;
fieldsList = 'fields' 'are' alpha (comma alpha)*;
valuesList = 'with' 'values' numeric (comma numeric)*;


alpha = Word;
numeric = Number;
alphanumeric = (alpha | numeric | '_' | '.');
comma = ',';
expr = '=';

--- 结束语法

@“ParseKit 的开发者”,你能帮帮我吗?

谢谢 :)

4

1 回答 1

1

ParseKit的开发者在这里。

你的语法有点不对劲。我制定了一个与您的示例输入相匹配的语法。我已经使用DebugApp目标运行了它,并且可以确认它适用于您的示例。

@start = records;
records = record+;
record = prefix source? params? fields? values? suffix;

prefix = 'record' '#' Number;
suffix = ';';

// source
source = 'source' Word;

// params
params = 'params' expr ('and' expr)*;
expr = name '=' Number;
name = Word;

// fields
fields = 'fields' 'are' name (',' name)*;

// values
values = 'with' 'values' val (',' val)*;

val = Number;
于 2012-04-03T18:37:33.627 回答