我正在尝试为我的编译器类做一个语法文本校正器。这个想法是:我有一些规则,这是语言(在我的例子中是葡萄牙语)固有的,比如“一个有效的短语是主语动词形容词”,就像“Ruby is great”一样。
好的,所以首先我必须标记输入“Ruby 很棒”。所以我有一个文本文件“动词”,有很多动词,一行一行。然后我有一个文本“形容词”,一个“代词”等。
我正在尝试使用 Ragel 创建解析器,但我不知道如何执行以下操作:
%%{
machine test;
subject = <open-the-subjects-file-and-accept-each-one-of-them>;
verb = <open-the-verbs-file-and-accept-each-one-of-them>;
adjective = <open-the-adjective-file-and-accept-each-one-of-them>;
main = subject verb adjective @ { print "Valid phrase!" } ;
}%%
我查看了 ANTLR、Lex/Yacc、Ragel 等。但找不到一个似乎可以解决这个问题的。我能想到的唯一方法是预处理 Ragel 的输入文件,以便我的程序读取文件并将其内容写入正确的位置。但我也不喜欢这个解决方案。
有谁知道我怎么能做到这一点?没有Ragel也没问题,我只想解决这个问题。我想使用 Ruby 或 Python,但这也不是必需的。
谢谢。