需要一个简单的野牛语法的HTML

需要一个简单的野牛语法的HTML,html,c,grammar,bison,context-free-grammar,Html,C,Grammar,Bison,Context Free Grammar,我看过Bison的帮助并写了这篇文章,但我不确定它是否完全正确。我还需要一个处理词法分析器的yylex()(应该是Flex工具)。我知道一些关于上下文无关语法的基本知识。但我不知道如何正确实施它们!:( 我想要一个简单的用于HTML的Bison语法。问题是:在下面的语法中应该更改什么 %{ #include <stdio.h> int yylex(void); int yyerror(char const *); %} %token NUM_TOKEN FI

我看过Bison的帮助并写了这篇文章,但我不确定它是否完全正确。我还需要一个处理词法分析器的
yylex()
(应该是
Flex
工具)。我知道一些关于上下文无关语法的基本知识。但我不知道如何正确实施它们!:(

我想要一个简单的用于HTML的Bison语法。问题是:在下面的语法中应该更改什么

%{
    #include <stdio.h>
    int yylex(void);
    int yyerror(char const *);
%}

%token NUM_TOKEN FILENAME_TOKEN COLOR_TOKEN NAME_TOKEN

/* Html Grammer follows... */
%%


/* Any html tag follow this pattern: */
EXPRESSION: 
            '<' TAG CLUSER '>' INNER_EXPRESSION "</" TAG '>' ;

/* Some html tags: */
TAG: 
     "a"    |
     "html" |
     "head" |
     "link" |
     "div"  |
     "input"|
     "from" |
     "title"|
     "img"  |
     "table"|
     "td"   |
     "tr"   ;


CLUSER:
       ALIGN|
       CLASS|
       ID|
       SRC|
       TEPY|
       ACTION|
       HREF|
       REL|
       /* € (Eplsilone) */
       ;


ALIGN:
      "align" '=' "left"|
      "align" '=' "right"|
      "align" '=' "center"
      ;

CLASS:
      "class" '=' NAME_TOKEN
      ;

ID:
      "id" '=' NAME_TOKEN
      ;

SRC:
      "src" '=' FILENAME_TOKEN
      ;

TEPY:
      "type" '=' CONT
      ;

ACTION:
      "action" '=' FILENAME_TOKEN
      ;

HREF:
      "href" '=' '\"#\"'|
      "href" '=' FILENAME_TOKEN
      ;

REL:
      "rel" '=' "stylesheet"|
      "rel" '=' "\"stylesheet\""
      ;


DOMIN:
      "px"|
      "mm"|
      "cm"|
      "inch"
      ;

PAS:
     "php"|
     "asp"|
     "aspx"|
     "css"
     ;

CONT:
     "button"|
     "checkbox"|
     "text"|
     "password"|
     "file"|
     "submit"
     ;

INNER_EXPRESSION:
     EXPRESSION|
     /* € (Eplsilone) */
     ;


/* Html grammer ends. */
%% 
它不是一个完整的HTML解析器。我只想验证非常简单的HTML文档,而不使用任何
CSS
样式或
JavaScripts
或。。。 我也看到了。
注意:解决方案必须是Bison语法!

标记应该是从lexer返回的令牌,否则您将编写案例,直到奶牛回家


属性等也是如此。

为什么不使用SGML/XML解析器呢?哦,去掉dev cpp。看,我不认为“TAG”应该是一个标记;我认为它是解析器级别的构造。我想这取决于“TAG”是什么意思;仅仅是标记名吗?在这种情况下,是的,词法分析器应该只关心标记标识符作为标记,而解析器应该关心它愿意识别的标记集合。@Pointy:这就是我的意思。最好只称它为
标识符
或诸如此类。尽管现在我想到了,有限的XML解析器我曾经使用过的Generator将标识符表预加载到一个散列中。lexer将识别“identifier”,但随后将执行散列查找作为一种方便。然后它可以为解析器提供一个标记名的整数代码(或类似于-1的未知名称),这使解析器速度大大加快。当然,我想解析器也可以执行这种查找。@Pointy:我同意。问题仍然存在,尽管bison是否真的支持“字符串文字”。我知道许多像ANTLR这样的集成词法分析器/解析器Gen。谢谢leppie&Pointy的回复,你对bison的输出有什么想法吗???
E:\Program Files\GnuWin32\bin>bison "E:\Dev-Cpp\HtmlBison\html.y" -o "E:\html.c"

E:\Dev-Cpp\HtmlBison\html.y: warning: 2 nonterminals useless in grammar
E:\Dev-Cpp\HtmlBison\html.y: warning: 8 rules useless in grammar
E:\\Dev-Cpp\\HtmlBison\\html.y:83.1-5: warning: nonterminal useless in grammar:
DOMIN
E:\\Dev-Cpp\\HtmlBison\\html.y:90.1-3: warning: nonterminal useless in grammar:
PAS
E:\\Dev-Cpp\\HtmlBison\\html.y:84.7-10: warning: rule useless in grammar: DOMIN:
 "px"
E:\\Dev-Cpp\\HtmlBison\\html.y:85.7-10: warning: rule useless in grammar: DOMIN:
 "mm"
E:\\Dev-Cpp\\HtmlBison\\html.y:86.7-10: warning: rule useless in grammar: DOMIN:
 "cm"
E:\\Dev-Cpp\\HtmlBison\\html.y:87.7-12: warning: rule useless in grammar: DOMIN:
 "inch"
E:\\Dev-Cpp\\HtmlBison\\html.y:91.6-10: warning: rule useless in grammar: PAS: "
php"
E:\\Dev-Cpp\\HtmlBison\\html.y:92.6-10: warning: rule useless in grammar: PAS: "
asp"
E:\\Dev-Cpp\\HtmlBison\\html.y:93.6-11: warning: rule useless in grammar: PAS: "
aspx"
E:\\Dev-Cpp\\HtmlBison\\html.y:94.6-10: warning: rule useless in grammar: PAS: "
css"
m4: cannot open `Files\GnuWin32/share/bison': No such file or directory
m4: cannot open `E:\Program': No such file or directory
m4: cannot open `Files\GnuWin32/share/bison/m4sugar/m4sugar.m4': No such file or
 directory