2014-05-13 64 views
4

以下代碼片段位於:http://zaach.github.io/jison/demos/calc/以及jison文檔頁面。在閱讀jison,lex和flex文檔之後 - 我仍然不完全瞭解%lex和/ lex語法。是否特定於jison掃描儀發生器?含義是它提供稍後在文檔中顯示的json輸出的唯一函數?我只問,因爲jison文檔沒有明確解釋它的用途,而flex/lex規則似乎不允許這樣的語法。jison中的%lex和/ lex行是什麼?

/* description: Parses end executes mathematical expressions. */ 

/* lexical grammar */ 
%lex 

%% 
\s+     /* skip whitespace */ 
[0-9]+("."[0-9]+)?\b return 'NUMBER'; 
"*"     return '*'; 
"/"     return '/'; 
"-"     return '-'; 
"+"     return '+'; 
"^"     return '^'; 
"("     return '('; 
")"     return ')'; 
"PI"     return 'PI'; 
"E"     return 'E'; 
<<EOF>>    return 'EOF'; 

/lex 

回答

4

%lex/lex標記只劃定,涉及到掃描儀生成語法的部分。 %lex標記標記開始,/lex標記結束。

當使用bisonflex你把詞法分析器的定義(在Jison用語中「掃描程序生成」)在.l文件和語法在.y文件。我不認爲有一種方法使用bisonflex(或yacc/lex)來組合這兩個文件。 (這是一個很長的一段時間,因爲我用bisonflex所以它是不可能的,有件事情我不知道。)

的事實是,儘管Jison需要從bisonflex靈感,它是真是一個獨立的工具。因此它包含的功能在bisonflex中沒有等效功能。