Coco/R 更Cool些,Coco/R 使用增强的 EBNF 文法建立递归下降分析的分析器(Recursive Descent Parser)和扫描器(Scanner)。Coco/R 除了提供调用分析器的主程序模块之外,还提供语义(semantic )模块在文法之中调用(如,符号表处理和代码生成器),可以直接在grammer 内写语意动作【用你自己喜欢的语言。俺是中意Delphi】。 http://www.ssw./coco/是它的主页 COMMENTS FROM "/*" TO "*/"
COMMENTS FROM "--" TO eol IGNORE eol + cr + tab
protected
ML_COMMENT :"/*" ({ LA(2)!='/' }? '*' |'\n' { newline(); } |~('*'|'\n') )* "*/" { $setType(Token.SKIP); } ; 看到没,必须用$setType来标明这个Token不会进入parser,只要碰到符合此条件的,就一律跳过。还有,Coco/R 可以很方便地支持像 python 那种缩进式的语法分析,不过具体如何弄我忘了。Antlr 也有 Python 语法文件,具体如何处理我还不是很清楚。 class SQLParser extends Parser;
options { exportVocab = SQL; buildAST = false; k = 2; } ansisql returns [Node parent] {parent = new Node();} : SELECT fieldlist[parent] EOF ; fieldlist [Node parent] {Node f = new Node();} : f = field {parent.next = f;} (COMMA fieldlist[f])* ; field returns [Node node] {node = new Node();} : id :ID {node.value = id.getText();} ;
|
|