我必須創建一個類似c語言的詞法和語法分析器。在這種語言中,我們將其定義爲「在符號%之後存在的所有內容,直到行結束」。以下聲明是否正確?定義評論和引用flex和野牛和詞彙錯誤
Flex
...
[%][^\n]*[\n] { return T_COMMENT; }
[\n] { return T_NEWLINE; }
Bison
...
comment:com text newline;
text: |name text|digit text;
...
com: T_COMMENT { printf("%s",yytext); };
newline: T_NEWLINE { printf("%s",yytext); };
我還需要定義引用符號」。是下列正確的是(柔性)?
"\"" { return T_QUOTE; }
有一個在flex和野牛輸入文件沒有編譯錯誤,但是當我使用一個程序用這種類似C語言編寫的測試輸入,我得到了第1行的詞彙錯誤。這一行沒有詞彙錯誤。我的程序必須從這樣開始: 程序name_of_program和一個包含新行 I做出以下聲明: Flex
"PROGRAM" { return T_PROGRAM; }
野牛
%start programma
%token T_PROGRAM
...
programma:PROGRAM name newline function STARTMAIN dec_var command ENDMAIN eof;
...
PROGRAM: T_PROGRAM { printf("%s",yytext); };
...
(以大寫單詞的定義就像節目裏,是語言的一部分) 難道我寫的東西錯了嗎?我認爲問題在於換行定義,但我不確定。
非常感謝您的回覆。對不起,很長的職位。