2012-04-03 12 views
1

私はレクサージェネレータを書く方法について考えています。私はその文法から言語のキーワードを識別する簡単な方法を考えることはできません。明らかにすべてのキーワードは端末ですが、すべての端末がキーワードではありません。たとえば、次の単純な文法の場合: truth_value - > 'true' | '偽'。 数字 - > '0' .. '9'; 'true'と 'false'はキーワードですが、 '0'、 '1'などはキーワードではありません。レクサージェネレータはどのように文法のキーワードを識別しますか?

何か助けていただければ幸いです。

答えて

1

ほとんどのレクサージェネレータは、キーワード(および他の端末)を識別するためにプログラマが正規表現(または類似のもの)を書く必要があります。私は正式な文法から始めようとしたことについて聞いたことがないし、キーワードを独自に把握している。

例えば、ここで私が数年前に書いた電卓用.lファイル(LEX /フレックス)入力ファイルの一部です:

sqrt { return SQRT; } 
lg  { return LN2; } 
log  { return LOG; } 
sin  { return SIN; } 
cos  { return COS; } 
tan  { return TAN; } 
pi  { return PI; } 
exit { return EXIT; } 
prec { return PREC; } 
print { return PRINT; } 
\?  { return PRINT; } 
[ \t] { ; } 

[-+*/=()^] { return yytext[0]; } 
\n   { lineno++; return yytext[0]; } 
+0

を明示的意味は、彼らはいくつかのリライトに使用されてきたにも関わらず、キーワードを宣言とにかくルール? –

+0

@prophet_on_that:正しく理解したら、はい。編集された回答のサンプルを参照してください。 –

+0

ありがとう、これは役立ちます。 –

関連する問題