簡體   English   中英

使用flex識別變量名不重復字符

[英]Using flex to identify variable name without repeating characters

我不太確定如何表達我的問題,很抱歉粗略的標題。

我正在嘗試創建一種模式,該模式可以識別具有以下限制的變量名稱:

  • 必須以字母開頭
  • 第一個字母后面可以跟字母、數字和連字符的任意組合
  • 第一個字母后面可以沒有任何內容
  • 變量名不能完全是 X([xX]+ 在這個語法中是一個單獨的標識符)

因此,例如,這些都是有效的:

  • 變量123
  • 養蜂人
  • E-3

但以下內容無效:

  • XXXX
  • X
  • 3變量
  • 5個

我可以用我當前的標識符滿足前三個要求,但我真的很難改變它,這樣它就不會選擇完全是字母 X 的變量。

這是我到目前為止所擁有的: [az][a-z0-9\-]* {return (NAME);}

任何人都可以建議一種編輯方法以避免僅由字母 X 組成的變量嗎?

處理這種要求的最簡單方法是使用一種模式來匹配異常字符串,另一種模式隨后出現在文件中,它匹配所有字符串:

[xX]+                    { /* matches all-x tokens */ }
[[:alpha:]][[:alnum:]-]* { /* handle identifiers */ }

這是有效的,因為如果兩個模式匹配相同的最長標記,則 lex(以及幾乎所有 lex 派生詞)select 是第一個匹配項。

當然,您需要知道要使用特殊符號做什么。 如果你只是想接受它作為某種令牌類型,那沒問題; 你只是那樣做。 另一方面,如果打算將其分解為子標記,也許是單個字母,那么您將不得不使用yyless() ,並且您可能希望切換到新的詞法分析 state 以避免重復匹配相同的X的長序列。 但也許這對你的情況並不重要。

有關詳細信息和示例,請參閱flex 手冊

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM